热搜
您的位置:首页 >> 历史

Schema的优化和索引高性能的索引策略覆盖索引3

2019年11月04日 栏目:历史

Schema的优化和索引 - 高性能的索引策略 - 覆盖索引3这个索引不能覆盖这个查询有如下两条原因:没有索引覆盖这个查询,因为我们

Schema的优化和索引 - 高性能的索引策略 - 覆盖索引3

这个索引不能覆盖这个查询有如下两条原因:

没有索引覆盖这个查询,因为我们选择了这个表的所有列,并且没有一个索引覆盖这些列。理论上来说MySQL还能使用一个捷径:WHERE条件中有一列被索引覆盖,因此MySQL会使用索引先找到这个actor并且检查title是否匹配,之后再取整个行。

MySQL不能在索引中执行LIKE操作符。这个受限于底层的存储引擎API。在索引的操作,这只能支持简单的比较。MySQL可以LIKE中匹配前缀,因为把它们转为简单的比较了。但是这个例子中前缀的通配符使使用索引查询变为了不可能。终。MySQL服务器将会获取和匹配这个行的值,而不是索引的值。

我们可以使用加索引(artist, title, prod_id)和重写查询来解决上面的问题。重写的查询如下

mysql> EXPLAIN SELECT *

-> FROM products

->    JOIN (

->       SELECT prod_id

->       FROM products

->       WHERE actor='SEAN CARREY' AND title LIKE '%APOLLO%'

->    ) AS t1 ON (t1.prod_id=products.prod_id)G

*************************** 1. row ***************************

id: 1

select_type: PRIMARY

table: <derived2>

...omitted...

*************************** 2. row ***************************

id: 1

select_type: PRIMARY

table: products

...omitted...

*************************** 3. row ***************************

id: 2

select_type: DERIVED

table: products

type: ref

possible_keys: ACTOR,ACTOR_2,IX_PROD_ACTOR

key: ACTOR_2

key_len: 52

ref:

rows: 11

Extra: Using where;

Using index

宝宝缺钙的症状表现是什么,宝爸妈要记住哦!
不生育易患卵巢癌吗?专家解答
人类的第三幅牙齿,你了解多少?
梁俊
四维彩超是什么
  • 友情链接
  • 合作媒体