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
正确建立索引以及最左前缀原则
最新推荐文章于 2024-03-16 17:55:29 发布