如果我试图增加使用特定表中4个不同列的查询的性能,我应该创建4个不同的索引(每个索引单独一个),还是应该创建1个索引以及所有列包括在内呢?MySql二级索引
回答
具有所有4个值的一个索引是我的经验最快的。如果您使用某个地方,请尝试将这些列放置在一个顺序中,以使其对该地点有用。
具有所有四列的索引;在WHERE中使用的列应该首先出现,而那些为你做==比较的列应该首先出现。
有时,优先考虑整数列可以获得更好的结果;因人而异。
因此,例如,
SELECT title, count(*) FROM table WHERE class = 'post' AND topic_id = 17
AND date > @@BeginDate and date < @@EndDate;
会对指数:topic_id,张贴,日期和标题,在这个秩序。
仅使用索引中的“标题”,以便DB可以为匹配查询的记录找到“标题”的值,而不额外访问数据表。
第一个字段的记录分布越平衡,你会得到最好的结果(在这个例子中,假设10%的行有topic_id = 17,那么你将丢弃其他90%,而不需要用'post'运行字符串比较 - 不是字符串比较特别昂贵。根据数据的不同,您可能会发现最好先指定日期并稍后发布,或者甚至先使用日期作为MySQL PARTITION。
然后再次,有多少个查询?您应计算查询成本乘以该查询的访问次数;请记住,索引维护会增加总体成本(例如INSERT和UPDATE会运行得慢一点)。 – LSerni 2012-07-10 19:34:53
单索引通常比索引合并更有效,所以如果你有像f1 = 1 AND f2 = 2 AND f3 = 3 AND f4 = 4
这样的条件,单索引会正确决定。
为了获得最好的性能枚举索引f以基数降序排列(不同值的数量),这将有助于减少分析的行数。
小于4个字段的索引可能更有效,因为它需要更少的内存。
http://www.mysqlperformanceblog.com/2008/08/22/multiple-column-index-vs-multiple-indexes/
- 1. Cassandra二级索引
- 2. Aerospike二级索引查询
- 3. 是否已弃用cassandra的二级索引功能?与二级索引分页
- 4. DynamoDBMapper - DynamoDBDocument和本地二级索引
- 5. Mnesia,选择和二级索引
- 6. InvalidQueryException尽管有二级索引?
- 7. 有关Cassandra二级索引的文档?
- 8. Cloudant二级索引查询include_docs
- 9. 低基数列的二级索引cassandra
- 10. 全局二级索引对象属性
- 11. Cassandra在RandomPartitioner下的二级索引
- 12. Cassandra 1.1.2创建二级索引失败
- 13. ORDER BY在Cassandra中的二级索引
- 14. AWS Lambda查询二级索引
- 15. 组合键上的Cassandra二级索引?
- 16. 二级索引更新问题
- 17. Cassandra范围查询:二级索引vs未索引Colum
- 18. 索引在Dynamo DB中的本地二级索引
- 19. 重新索引第二级多级数据帧
- 20. 使用低级java API查询dynamoDB的本地二级索引
- 21. Riak二级索引搜索没有返回键每次
- 22. 如何搜索Cassandra中的二级索引而不平等?
- 23. 搜索索引 - 12 =十二
- 24. Xamarin.Forms-x:引用第二级
- 25. 的MySQL索引
- 26. pandas中的数据框中的两级索引:计数每个第一级索引的第二级索引的数量
- 27. HBase 0.92是否支持协处理器二级索引?
- 28. Spark SQL是否使用Cassandra二级索引?
- 29. 在Riak中获取具有相似二级索引的对象?
- 30. UpdateItemRequest - 使用本地二级索引更新多个项目
你应该尝试每个想法,你能拿出和前后比较性能,然后使用一个,让所有使用情况最好的整体表现上升。 – mellamokb 2012-07-10 19:22:44
我不介意尝试每一个......主要的问题是创建这些索引可能需要每个8-10小时,这个问题可以解决得越快越好。如果没有人有任何具体的理由去做这一个或另一个,这将是我的方法 – Miles 2012-07-10 19:23:35
把你的数据的一个子集,转储到sqlfiddle,至少你可以看看执行计划,而不需要8-10小时。 – 2012-07-10 19:24:50