4

mysql 中记录的默认排序 ID 是 ASC(即我插入的行在表中),但我们将仅使用表中的最新信息(即下面的行)。

如果我们将默认排序更改为DESC(即新记录到表顶部)并且将从表顶部查询频繁信息,是否会有任何性能改进。

4

2 回答 2

4

我认为情况会适得其反。

我的评论基于我如何理解索引在 SQL Server 中的工作 - 如果我有机会阅读更多关于它们如何在 MySQL 中工作的信息,我将尝试稍后进行修改。

以与索引排序相同的顺序插入行,而不是以相反的顺序插入行,可能会有轻微的性能优势。

如果您以相同的顺序插入,并且要插入的下一行在排序顺序上始终大于现有行,那么您将始终在最后一页行数据中找到下一个可用的空点(如果存在)。

如果你做相反的事情,总是让你的下一个插入行的排序顺序小于现有行,那么你可能总是在你的第一页行数据中发生冲突,并且引擎会做更多的工作来改变行的位置如果页面有空间。

至于您在 select 语句中的 order by 子句:1) SQL 标准中没有关于索引的任何内容,除了 ORDER BY 子句之外,没有任何内容可以保证您的结果集排序。通常,SQL Server 中仅使用一个索引的查询将看到按索引顺序返回的结果。但是,如果隔离级别更改为“读取未提交”(混乱?),那么它将更有可能按照在内存或磁盘上找到它们的顺序返回行,这不一定是您想要的顺序。

2) 如果您的 select 语句中的 order by 基于与索引完全相同的列标准,那么您的数据库服务器应该使用索引顺序或与索引顺序相反的方式执行相同的操作。这非常简单,除非您有一个多列索引,其中包含针对不同列的混合 ASC-DESC 声明。您可以通过 order by 等于索引顺序和 order by 等于反向索引顺序获得相同的性能,其中反向索引顺序是通过用 DESC 和 ASC 替换索引声明中的 ASC 和 DESC 声明(显式和隐式)来确定的order by 子句。

于 2012-12-10T13:10:45.230 回答
1

任何性能变化都将是查询记录,而不是插入记录。

对于查询,我怀疑这会产生很大的影响,因为通过键进行的数据库查询通常具有相似的速度。

这也取决于你的数据,所以我会进行一些测试。

于 2012-11-25T03:19:17.203 回答