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

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

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

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树性能

相关文章
相关标签/搜索