【发布时间】:2013-04-04 14:52:05
【问题描述】:
这既不是MySQL index slowing down query 也不是Slow search by index query LIKE% MYSQL 的副本
在一个非常简单的表上,我尝试了一个非常简单的查询,有和没有特定索引。
表格(40 000 行):
id int(11)
shipping_address_id int(11)
billing_address_id int(11)
label varchar(100)
code varchar(15)
email varchar(100)
查询:SELECT email FROM table WHERE email LIKE "%yahoo%"
如果“电子邮件”没有索引,则需要 0.0035 秒。然而,使用这个 INDEX,它需要 0.021 秒,慢了 7 倍。
然而,同样的 INDEX 确实将相等查询加速了 50 倍 (WHERE email = "me@yahoo.com")。
那么,为什么 LIKE 查询会受到 INDEX 的负面影响?
编辑错字:该查询最初是 LIKE "yahoo",而它应该是 LIKE "%yahoo%",我很抱歉。
为清晰而编辑:该表是 InnoDB,我正在比较相同查询的速度。在第一种情况下(“LIKE”情况),在比较字段上使用 INDEX 时,查询速度会慢 7 倍。在第二种情况下(“=”),使用 INDEX 的查询速度提高了 50 倍。
【问题讨论】:
-
您正在比较两个不同的查询。您没有正确隔离是否仅使用索引。您的测试无效。
-
对不起,我不明白你的意思。我只与一个查询(“LIKE”)进行比较。另一个查询 ("=") 只是在这里表明 INDEX 可以使用它。在你说我写无效的东西之前你是不是读得太快了?