Mysql 数据库排序的时间复杂性

Mysql 数据库排序的时间复杂性,mysql,performance,sorting,Mysql,Performance,Sorting,我目前正在开发一个移动应用程序,并使用Codeigniter MySQL。我现在面临的情况是,我有一个图书表(这个表将有10万以上的记录)。在这个表中,我有一个列叫做NotSelling。数据库示例: Book A 45 Book B 0 Book C 159 Book D 78 . . . Book Z 450 其中,上述数字是db中NotSelling列中显示的数字。我需要从这张大桌子上抽出前20本书。现在,我的解决方案是对表进行排序,然后使用TOP提取前20条记录 我想知道的是关于表格排

我目前正在开发一个移动应用程序,并使用Codeigniter MySQL。我现在面临的情况是,我有一个图书表(这个表将有10万以上的记录)。在这个表中,我有一个列叫做NotSelling。数据库示例:

Book A 45
Book B 0
Book C 159
Book D 78
.
.
.
Book Z 450
其中,上述数字是db中NotSelling列中显示的数字。我需要从这张大桌子上抽出前20本书。现在,我的解决方案是对表进行排序,然后使用
TOP
提取前20条记录

我想知道的是关于表格排序的性能。我确信,不断地对表格进行排序以获得前20名的结果将花费非常长的时间。我得到了解决问题的办法:

  • 为非销售问题编制索引
  • 缓存查询(但我读过关于粗失效的文章,这可能会导致问题,因为我的情况是失效频率很高)
  • 对表进行排序将前20条记录放在另一个表中,然后定期更新表,比如每小时左右更新一次

但是,尽管如此,有没有人知道这个问题的更好的解决方案,或者有没有一种方法可以优化我正在寻找的功能的性能?请注意,我是一名新手,如果有人能为我指出正确的方向,让我了解数据库性能,我将不胜感激。

不要担心排序的性能。如果事实证明这是一个问题,那么以后可以通过添加索引在数据库中解决这个问题


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

我想你在这里想得太多了。这绝对是一个过早优化的例子。而上述所有解决方案都是完全有效的。您应该知道,100K+记录是Mysql的杂烩。我们过去经常对3000多万行的表进行
订购
,性能优异


但是必须对正在排序的列进行索引,并仔细检查表架构。规则。缓存也不用担心,mysql会在表没有更改的情况下为重复查询提供缓存。但列上的索引是一个必须的、主要的和最重要的要求。

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

这意味着,从理论上讲,无论你有100万或200万亿的记录,只要你有一个索引,拉取前20个记录的速度都一样快。实际上,会有性能上的差异,因为一个小索引将适合内存,而一个大索引将不得不使用磁盘


总之,你担心的太多了。正如Srikar Appal所言,一个正确索引的100k记录表对MySQL来说算不了什么

谢谢您的回复!在我开始编辑之前,我真的需要澄清一些事情谢谢你的回复!