为什么不使用索引?

时间:2012-09-25 18:54:22

标签: mysql

我有一个简单的查询:

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索引,如何优化表格,以便在没有全表扫描的情况下顺利运行此查询

已经优化了表并检查了错误..

1 个答案:

答案 0 :(得分:2)

鉴于您的LIKE条件在要比较的表达式的开头和结尾处有%,索引在此上下文中无用。

索引仅在比较表达式以“有序”方式找到时才有用,如A在B之前,在C之前,换句话说,LIKE 'google%'可以使用索引,而{ {1}}不会。