正确建立索引以及最左前缀原则

1. 索引建立的原则

用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。
仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是很好的备选列

SELECT
 col_a <- 不是备选列
FROM
 tbl1 LEFT JOIN tbl2
 ON tbl1.col_b = tbl2.col_c <- 备选列
WHERE
 col_d = expr; <- 备选列

 当然,显示的数据列与WHERE子句中使用的数据列也可能相同。
 我们的观点是输出列表中的数据列本质上不是用于索引的很好的备选列。


 
2. 复合索引的建立以及最左前缀原则
索引字符串值的前缀(prefixe)。如果你需要索引一个字符串数据列,那么最好在任何适当的情况下都应该指定前缀长度。
 例如,如果有CHAR(200)数据列,如果前面10个或20个字符都不同,就不要索引整个数据列。
 索引前面10个或20个字符会节省大量的空间
 你可以索引CHAR、VARCHAR、BINARY、VARBINARY、BLOB和TEXT数据列的前缀。


 假设你在表的state、city和zip数据列上建立了复合索引。索引中的数据行按照state/city/zip次序排列,
 因此它们也会自动地按照state/city和state次序排列。这意味着,即使你在查询中只指定了state值,
 或者指定state和city值,MySQL也可以使用这个索引。因此,这个索引可以被用于搜索如下所示的数据列组合:
state, city, zip
 state, city
 state

 MySQL不能利用这个索引来搜索没有包含在最左前缀的内容。例如,如果你按照city或zip来搜索,
 就不会使用到这个索引。如果你搜索给定的state和具体的ZIP代码(索引的1和3列),
 该索引也是不能用于这种组合值的,尽管MySQL可以利用索引来查找匹配的s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值