SQL查询的计算复杂性

Goo*_*ieK 4 sql sorting time-complexity

如果我有一个博客帖子的表,有post_id和author_id这样的列,我使用SQL"SELECT*FROM post_table where author_id = 34",该查询的计算复杂度是多少?它是否只是查看每一行并检查它是否具有正确的作者ID,O(n),还是它做了更有效的事情?

我只是想知道因为我在这种情况下我可以使用这些数据搜索SQL数据库,或者加载带有帖子列表的xml文件,并搜索那些,我想知道哪个会更快.

Gor*_*off 8

有两种基本方法可以执行这种简单的查询.

首先是进行全表扫描.这将具有O(n)性能.

第二个是在索引中查找值,然后加载页面,并返回结果.索引扫描应为O(log(n)).加载页面应为O(1).

使用更复杂的查询,很难做出这样的一般性陈述.但是任何SQL引擎通常都会采用这两种方法之一.哦,如果表在author_id上分区,则有第三个选项,但您可能对此不感兴趣.

也就是说,数据库的强大功能并不在于这些细节.它是在记忆的管理.数据库将数据索引缓存在内存中,因此您不必重新读取数据页.数据库将利用多个处理器和多个磁盘,因此您无需对此进行编码.面对更新和删除,数据库使所有内容保持一致.

至于你的具体问题.如果数据在数据库中,请在那里搜索.将所有数据加载到xml文件中,然后在内存中进行搜索需要大量开销.如果与数据库的连接速度很慢并且您正在执行许多此类查询,那么您只想这样做.


Tom*_*rle 6

看一下EXPLAIN命令.它显示了执行给定SELECT查询时数据库实际执行的操作.