mysql中记录的默认排序ID是ASC (即,我插入的行将沿着表向下),但我们将仅使用表中的最新信息(即下面的行)。
如果我们将默认排序改为DESC (即,新记录转到表的顶部),并从表的顶部查询频繁的信息,是否会有任何性能改进。
发布于 2012-12-10 21:10:45
我认为情况正好相反。
我的这篇评论是基于我对索引在SQL Server中的工作原理的理解-如果我有机会阅读更多关于它们在MySQL中如何工作的内容,我会尝试稍后再进行修改。
与以相反的顺序插入行相比,以与索引排序相同的顺序插入行可能有轻微的性能优势。
如果您以相同的顺序插入,并且要插入的下一行的排序顺序始终大于现有行,则您将始终在最后一页的行数据中找到下一个可用的空点(如果存在)。
如果你做相反的事情,总是让你的下一个插入行在排序顺序上比现有的行更小,那么你可能总是会在第一页的行数据中发生冲突,如果页面有空间的话,引擎会做更多的工作来移动行的位置。
至于select语句中的order by子句: 1) SQL标准中没有任何关于索引的内容,除了ORDER BY子句之外,没有任何东西可以保证结果集的有序性。通常,SQL Server中仅使用一个索引的查询将看到按索引顺序返回的结果。但是如果隔离级别更改为“读取未提交的”(chaos?)然后,它将以在内存或磁盘中找到行的顺序返回行,这不一定是您想要的顺序。
2)如果select语句中的order by基于与索引完全相同的列条件,则数据库服务器应该对索引顺序执行相同的操作,或者与索引顺序相反。这非常简单,除非您的多列索引对不同的列使用了混合的ASC-DESC声明。order by等于index order,order by等于逆索引order,通过在order by子句中将index声明中的ASC和DESC声明(显式和隐式)替换为order by子句中的DESC和ASC,可以获得相同的性能。
发布于 2012-11-25 11:19:17
任何性能变化都将发生在查询记录上,而不是插入记录上。
对于查询,我怀疑这会有多大影响,因为键的数据库查询通常有类似的速度。
这也取决于你的数据,所以我会运行一些测试。
https://stackoverflow.com/questions/13547934
复制相似问题