如果我试图提高使用特定表中4个不同列的查询的性能,我应该创建4个不同的索引(每列一个),还是应该创建一个包含所有列的索引?
发布于 2012-07-11 03:23:01
根据我的经验,一个包含所有4个值的索引是最快的。如果使用where,请尝试按对where有用的顺序放置列。
发布于 2012-07-11 03:28:24
包含所有四列的索引;WHERE中使用的列应该放在第一位,对其执行==比较的列应该放在第一位。
有时,将优先级给予整型列可以获得更好的结果;
举个例子,
SELECT title, count(*) FROM table WHERE class = 'post' AND topic_id = 17
AND date > @@BeginDate and date < @@EndDate;将有一个索引: topic_id,post,date和title,按照这个顺序。
索引中的"title“仅用于使DB可以找到与查询匹配的那些记录的"title”值,而无需额外访问数据表。
记录在第一个字段上的分布越平衡,您就会得到最好的结果(在本例中,假设10%的行的topic_id = 17,您将丢弃其余的90%,而不必运行与'post‘的字符串比较--这并不是说字符串比较的开销特别大。根据数据的不同,您可能会发现先为date创建索引,然后再发布,甚至将date first用作MySQL分区会更好。
发布于 2012-07-11 06:34:24
单个索引通常比索引合并更有效,所以如果您有像f1 = 1 AND f2 = 2 AND f3 = 3 AND f4 = 4这样的条件,单个索引将是正确的决策。
为了达到最佳性能,按照基数的降序(不同值的计数)枚举索引字段,这将有助于减少分析的行数。
少于4个字段的索引可能更有效,因为它需要更少的内存。
http://www.mysqlperformanceblog.com/2008/08/22/multiple-column-index-vs-multiple-indexes/
https://stackoverflow.com/questions/11420383
复制相似问题