创建高新能的索引策略
(1)独立的列:索引 不能是表达式的一部分,也不能是函数的参数。
eg:mysql>SELECT actor_id from actor where actor_id-1=4;【索引actor_id,正确写法:actor_id=5;】
(2)前缀索引和选择性: 索引很长的 字符列,--->通常使用 前缀索引。【选择性,尽量保证与 完整列的选择性 相差不大。】
【缺点:Mysql无法用前缀索引 做ORDER BY 和 GROUP BY,也无法做覆盖扫描。】
1.如何找合适的前缀长度:
①查看完整列的选择性---SELECT COUNT(DISTINCT city)/COUNT(*) From sakila.city;
②查看各个长度,前缀列的选择性【相近即可用】SELECT COUNT(DISTINCT LEFT(city,3))/COUNT(*) AS sel3,
->COUNT(DISTINCT LEFT(city,4))/COUNT(*) AS sel4,
->COUNT(DISTINCT LEFT(city,5))/COUNT(*) AS sel5
From sakila.city;
(3)多列索引:
用途:eg create index(last_name,first_name,birthday);
①全值匹配:查找Cuba Hellen 出生于1960-01-12。
②匹配最左前列:查找所有 姓为Cuba的人。
③匹配列前缀:查找所有以 C开头的 姓的人。
④匹配范围值:查找 姓在Allen和Barrymore之间的人。
⑤精确匹配某一列 并 范围匹配另外一列:查找所有姓为 Cuba ,名为K开头的人。