如果我试图提高使用特定表中4个不同列的查询的性能,我应该创建4个不同的索引(每个列分别对应一个列),还是应该创建包含所有列的1个索引? / p>
答案 0 :(得分:2)
根据我的经验,所有4个值的一个索引最快。如果您使用where,请尝试将列放入使其对where。
有用的顺序答案 1 :(得分:0)
包含所有四列的索引; WHERE中使用的列应首先使用,而您执行== compare的那些列应该首先使用。
有时,优先考虑整数列可以获得更好的结果; YMMV。
例如,
SELECT title, count(*) FROM table WHERE class = 'post' AND topic_id = 17
AND date > @@BeginDate and date < @@EndDate;
将按以下顺序编写索引:topic_id,post,date和title。
仅使用索引中的“标题”,以便DB可以为与查询匹配的记录找到“title”的值,而无需额外访问数据表。
第一个字段上的记录分布越均衡,您将获得最佳结果(在此示例中,假设10%的行具有topic_id = 17,您将丢弃其他90%而无需运行与'post'进行字符串比较 - 不是字符串比较特别昂贵。根据数据,您可能会发现最好先将日期编入索引并稍后发布,或者甚至首先将日期用作MySQL PARTITION。
答案 2 :(得分:0)
单个索引通常比索引合并更有效,因此如果您有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/