Schema的优化和索引 - 高性能的索引策略 - 覆盖索引(Covering Indexes)
2009-09-02 00:00:00 来源:WEB开发网当一个查询被索引所覆盖。(an index-covered query)。你使用EXPLAIN就会发现EXTRA列的值为“Using index”。一个例子,sakila.inventory表由一个多列的索引在store_id, film_id的列上。MySQL能使用索引来访问这两列。如下
mysql> EXPLAIN SELECT store_id, film_id FROM sakila.inventoryG
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: inventory
type: index
possible_keys: NULL
key: idx_store_id_film_id
key_len: 3
ref: NULL
rows: 4673
Extra: Using index
覆盖索引的语句有些诡异的是会关闭优化。MySQL语句优化器在执行语句之前会决定是否有一个索引覆盖它。假使这个索引覆盖了一个WHERE条件,但是并不是整个查询。如果这个条件评估为false,MySQL51以及以前版本都会取出行。
让我们来看看为什么会这样。以及怎样重写这个查询来解决上面所说的问题。
mysql> EXPLAIN SELECT * FROM products WHERE actor='SEAN CARREY'
-> AND title like '%APOLLO%'G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: products
type: ref
possible_keys: ACTOR,IX_PROD_ACTOR
key: ACTOR
key_len: 52
ref: const
rows: 10
Extra: Using where
更多精彩
赞助商链接