文章:ID,标题,描述,发布日期时间,浏览次数,已发布
主键:ID
使用的查询:
Select Title FROM Article ORDER By ViewsCount DESC, PublishedDateTime ASC
您可以看到,我混合使用 ASC 和 DESC,并根据 MySQL Order By 优化,索引将不会被使用。
我考虑使用一个由 ViewsCount 和 PublishedDateTime 组成的复合索引。您是否建议使用两个不同的键而不是使用复合索引?但是我之后读到过的是,如果两个字段都要使用,则复合索引比使用两个不同的键更好。
一些额外的信息:
该表包含超过 550K 条记录,而且我在添加和删除索引时遇到了很大的麻烦。您们有什么建议吗?我应该在小样本上进行测试吗?
以下是更多见解:
使用的索引:
1)ViewsCount
2)PublishedDateTime
3)ViewsCount 和 PublishedDateTime(名为 ViewsDate_Index)
A) EXPLAIN 查询使用 ASC 和 DESC:
EXPLAIN SELECT title FROM `article` ORDER BY ViewsCount DESC , PublishedDateTime ASC LIMIT 0 , 20
====+===============+=========+======+===============+=====+=========+======+========+================+
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | article | ALL | NULL | NULL| NULL | NULL | 550116 | Using filesort
====+===============+=========+======+===============+=====+=========+======+========+================+
B) 使用相同的排序顺序解释查询:
EXPLAIN SELECT title FROM `article` ORDER BY ViewsCount DESC , PublishedDateTime DESC LIMIT 0 , 20
====+===============+=========+=======+===============+=================+=========+=============+========+================+
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
1 | SIMPLE | article | index | NULL | ViewsDate_Index | 16 | NULL | 550116 |
====+===============+=========+=======+===============+=================+=========+=============+========+================+
你可以看到,如果ViewsCount和PublishedDateTime按照相同的排序顺序排列,则使用ViewsDate_Index索引。我发现奇怪的一件事是,possible_keys为空,但它仍然选择了一个索引。有人能解释一下这个原因吗?
此外,关于在这个表上添加索引的任何建议,因为添加新索引需要很长时间。任何关于此方面的解决方法或帮助都将不胜感激。