【问题标题】:Time Complexity of Sorting a database排序数据库的时间复杂度
【发布时间】:2013-07-15 00:37:06
【问题描述】:

我目前正在开发一个移动应用程序并使用 Codeigniter MySQL。我现在面临的情况是我有一张书表(这张表将有 100k+ 条记录)。在此表中,我有一个名为 NotSelling 的列。数据库示例:

Book A 45
Book B 0
Book C 159
Book D 78
.
.
.
Book Z 450

上面的数字是 db 中 NotSelling 列中显示的数字。我需要从这个大表中提取前 20 本书。现在我的解决方案是对表进行排序,然后使用TOP 提取前 20 条记录。

我想知道的是关于表格排序的性能。我敢肯定,不断地对表格进行排序以获得前 20 个结果将花费非常长的时间。我已经得到了问题的解决方案:

  • 索引 NotSelling 问题。
  • 缓存查询(但我读过粗略的失效可能会导致问题,因为我的情况下失效频率会很高)
  • 对表格进行排序,取出前 20 条记录,将它们放在另一个表格中,然后每隔一小时左右定期更新表格。

但是说了这么多,有没有人知道这个问题的更好解决方案,或者有一种方法/方法来优化我想要做的功能的性能?请注意,我是新手,所以如果有人能够指出我可以阅读有关数据库性能的正确方向,我将不胜感激。

【问题讨论】:

    标签: mysql performance sorting


    【解决方案1】:

    我认为你在这里想太多了。绝对是过早优化的情况。虽然上述所有解决方案都是完全有效的。您应该知道 100K+ 记录对 Mysql 来说是杂烩。我们过去经常在超过 3000 万行的表上使用order,性能非常好。

    但是您必须在被排序的列上有索引,并仔细检查您的表架构。注册。缓存也不用担心,当表没有改变时,mysql会为你重复查询。但是列索引是必须的、主要的和最重要的要求。

    【讨论】:

    • 感谢您的回复!在我开始编码之前确实需要澄清一些事情
    【解决方案2】:

    不用担心排序的性能。如果这确实是一个问题,那么以后可以通过添加索引在数据库中修复它。

    在设计阶段,优化是一种干扰。相反,应关注实现代表问题的功能和直接性。只要这些都在目标上,其他一切都可以相对容易地解决。

    【讨论】:

    • 感谢您的回复!
    【解决方案3】:

    根据支持该列的索引的数据结构中保存的元数据类型,可能会在 O(n) 时间内完成遍历,其中 n 是返回的项目数。

    这意味着理论上,无论您有 100 万条还是 200 万亿条记录,只要您有索引,提取前 20 条记录的速度就会一样快。在实践中,会存在性能差异,因为小索引将适合内存,而大索引则必须使用磁盘。

    总之,你太担心了。作为 Srikar Appal,一个正确索引的 100k 记录表对 MySQL 来说毫无意义

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-14
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2021-05-30
      相关资源
      最近更新 更多