gpt4 book ai didi

mysql - 如何使用 LIMIT 优化 WHERE 子句中的通配符查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:28 25 4
gpt4 key购买 nike

目前,我有这个查询

SELECT field1 FROM table1 
WHERE field1 LIKE '%foo%'
LIMIT 20

进行以下查询是否更有效率?

SELECT field1 FROM table1 
WHERE
field1 LIKE 'foo' OR
field1 LIKE 'foo%' OR
field1 LIKE '%foo%'
LIMIT 20

SQL VERSION(抱歉我应该早点提到)

MySQL 5.5 与共享主机上的 innoDB 引擎。使用此配置,我无法使用 FULLTEXT 索引(Fulltext Index 可从 innoDB 上的 MySQL v5.6 获得)

我的详细目标

我需要找到 20 条包含单词的记录。大多数情况下,该词将与字段中的值完全匹配,即见表:

|  **field1**  |  **search**  |
| record1 | foo |
| record2 | fooziness |
| record3 | other1 |
| record4 | foo |
| record5 | other2 |
| ... | ... |

我知道 'word''word%' 使用索引,而最后一个 '%word%' 不使用。

查询优化器是否会首先尝试查找包含'word''word%' 的记录并保存对'%word%' 的低效搜索 如果找到 20 个 'word' ?

最佳答案

这对您来说测试比我们回答要容易得多 - 特别是因为实际查询可能比您显示的要复杂得多。

然而...

根据manual , limit 可以优化查询,但主要是在使用 order by 时。这是有道理的,因为很可能会有多个“where”子句,而 limit 子句不一定知道哪些受 limit 子句的影响。

我通过执行以下操作在类似查询中作弊:

( SELECT field1, 1 as quality FROM table1 
WHERE field1 = 'foo'
) union
( SELECT field1, 2 as quality FROM table1
WHERE field1 LIKE 'foo%'
) union
( SELECT field1, 3 as quality FROM table1
WHERE field1 LIKE '%foo%'
)
order by quality
LIMIT 20

这可读性差很多,但确实诱使优化器在找到 20 条记录后放弃查询。不确定这是否有效。

当然,如果性能对您很重要,使用 MySQL Full text searching速度更快,也更不脆弱。

关于mysql - 如何使用 LIMIT 优化 WHERE 子句中的通配符查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44678515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com