2012-12-30 91 views
4

如果我有一個表格,比如說博客文章,有post_id和author_id這樣的列,並且我使用SQL「SELECT * FROM post_table where author_id = 34」,那麼計算複雜度是多少該查詢?它是否會簡單地查看每一行,並檢查它是否具有正確的作者ID,O(n),還是它做更有效的事情?SQL查詢的計算複雜性

我只是想知道,因爲我的情況,我既可以用這個數據搜索SQL數據庫,或加載與職位名單的XML文件,並通過這些搜索,我想知道這將是更快。

回答

8

有這樣一個簡單的查詢將被執行兩種基本方法。

首先是做一個全表掃描。這將有O(n)的表現。

第二個是查找索引中的值,然後加載頁面並返回結果。索引掃描應該是O(log(n))。加載頁面應該是O(1)。

有了更復雜的查詢,這將是很難做出這樣的一般性發言。但是任何SQL引擎通常都會採用這兩種路徑之一。哦,如果表是在author_id上分區的,還有第三種選擇,但是您可能對此不感興趣。

也就是說,數據庫的權力不是在這些細節上。它在記憶的管理中。數據庫將在內存中緩存數據索引,因此您不必重新讀取數據頁面。數據庫將利用多個處理器和多個磁盤,因此您不必編碼。面對更新和刪除,數據庫保持一致。

至於你的具體問題。如果數據在數據庫中,請在此處搜索。將所有數據加載到xml文件中,然後在內存中進行搜索需要很多開銷。如果與數據庫的連接速度很慢並且您正在執行許多此類查詢,則只會這樣做。

5

看看EXPLAIN命令。它顯示了執行給定SELECT查詢時數據庫實際執行的操作。