我正在使用1Million记录的Sqlite数据库。我需要使用多列进行排序。为此我在数据库上创建了复合索引,这些索引改进了性能顺序,但是当我们反转排序顺序而不是索引中指定时,性能仍然很差。 对于例如我创建了索引 创建索引StudentIDNAMEIndex ( SID DESC, NAME DESC );
当ORDER BY SID ASC,NAME DESC或任何其他组合时,ORDER BY查询的性能会急剧下降。由于无法为每个组合添加索引,是否有另一种方法可以在没有索引或有效使用索引的情况下改进排序?
答案 0 :(得分:4)
排序一百万件东西正在整理一百万件事。如果您没有按照您想要的顺序对其进行排序,则只需要对数据进行排序即可。
如果数据库是只读的,那么您可以通过以下许多工作获得排序性能的显着改进。获取每个文本列,并创建一个表,其中只包含该列的值(按排序顺序),升序ID和id上的索引。在原始表中,使用id替换text列。最后,您将获得一个包含一百万个条目的表,每个条目只是一个数字ID列表。
您应该更快地找到此表进行排序(因为整数比字符串更快比较,并且您在排序期间丢失的数据更少)。您仍然可以加入原始文本数据的所有辅助表。但是,如果您想要输入不在辅助表中的新文本,您将需要做很多工作。重组应用程序以使用此结构需要做很多工作。
那说我过去曾使用过这种设计,而且只读操作的性能提升非常显着。然而,使其发挥作用所需的工作也很重要。