这既不是MySQL 索引减慢查询的副本,也不是按索引查询的慢速搜索 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 倍。