联合索引 最左前缀索引 索引数据结构

数据库性能优化1——正确建立索引以及最左前缀原则 http://blog.csdn.net/zhanglu0223/article/details/8713149

SQL联合索引 与 单一列的索引 http://blog.csdn.net/shellching/article/details/7655793

1. 索引建立的原则

用于索引的最好的备选数据列是那些出现在WHERE子句、join子句、ORDER BY或GROUP BY子句中的列。

仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是很好的备选列
SELECTcol_a <- 不是备选列

FROMtbl1 LEFT JOIN tbl2ON tbl1.col_b = tbl2.col_c <- 备选列

WHEREcol_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

3.索引数据结构——B树

posted @ 2015-03-26 10:27  xaf_dfg  阅读(1826)  评论(0编辑  收藏  举报