我有一个简单的查询:
SELECT id
FROM logo
WHERE (`description` LIKE "%google%" AND `active` = "y")
ORDER BY id ASC
表logo
(MyISAM)由大约30个字段组成,其中包含2402024行。
字段description
是varchar(255)非空。
字段active
是ENUM('y','n')非空
这些索引的基数是:
`active`: BTREE Card. 2
`description`: BTREE Card. 200168
对查询的EXPLAIN返回:
select_type: SIMPLE
table: logo
type: ALL
possible_keys: active
key: NULL
key_len: NULL
ref: NULL
rows: 2402024
Extras: Using where
我想知道为什么查询没有使用description
索引,如何优化表格,以便在没有全表扫描的情况下顺利运行此查询
已经优化了表并检查了错误..
答案 0 :(得分:2)
鉴于您的LIKE
条件在要比较的表达式的开头和结尾处有%
,索引在此上下文中无用。
索引仅在比较表达式以“有序”方式找到时才有用,如A在B之前,在C之前,换句话说,LIKE 'google%'
可以使用索引,而{ {1}}不会。