【发布时间】:2020-04-13 06:59:01
【问题描述】:
假设我们有一个表格,比如
CREATE TABLE test{
title VARCHAR(32),
city VARCHAR(32),
description TEXT
...
在查询中说我们有
SELECT * FROM test WHERE MATCH(title, description) AGAINST('xyz' IN NATURAL LANGUAGE MODE) AND city = 'ABC';
MySQL 会知道首先使用“城市”条件,还是我们应该更明确地使用子查询?
【问题讨论】:
-
这取决于索引和统计数据。view the query plan 看看 MySQL 实际选择了什么。
-
写入多个索引:stackoverflow.com/a/12222699/2864740;查询规划器仍然可能选择不使用 [附加] 索引,基于 carnality 估计。这就是为什么查看实际查询计划(可能会随着时间而改变!)很重要的原因。
-
请参阅stackoverflow.com/q/12427110/2864740 了解一些注意事项。大概是个骗局。问题也是..
-
无论如何,回到标题:子查询不太可能更有效。无论如何,非依赖子查询在逻辑上都是“展开”的。如果这以某种方式触发查询计划器中的行为更改,则打开 YMMV。见第一条评论。
-
请提供
EXPLAIN SELECT用于所述查询,并交换AND子句。 (粘贴的文本版本就足够了。)
标签: mysql sql where-clause database-performance match-against