0

我有一个简单的查询:

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') not null 这些索引的基数是:

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

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

4

1 回答 1

2

鉴于您的LIKE条件%在被比较的表达式的开头和结尾都有 a ,因此在这种情况下索引是无用的。

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

于 2012-09-25T18:56:07.067 回答