資料庫的規模對select語句的效率影響有多大?

2021-05-22 06:38:06 字數 1537 閱讀 7017

今天跟同學為了乙個問題爭了好久,現在越來越能夠享受爭論的樂趣了,不會像以前一樣帶入太多的個人情緒,更能夠客觀的看待問題本身了。他的觀點是當乙個資料庫規模不斷增大時,查詢同樣條數的select語句查詢的效率會越來越低,舉個例子:乙個資料庫總共有1w資料時取一千資料跟資料庫總用有1000w時取一午資料的查詢時間會差別非常大,他認為會嚴重影響到使用者體驗,而我認為影響不會太大。為了確定到底誰的觀點正確,我就又做了一次實驗。實驗在sql 2005的studio介面下進行,採用命令如下格式:

select getdate()

select * from tablename where ...

select getdate()

首先將待查的那個表清空,然後慢慢增加資料,在每個數量級進行一次時間測試。

+  總資料量(w)   取1w耗時(s)     取全部耗時(s)

+       1                   0.341              0.34

+       10                 0.279            not test

+       36.5              0.407              5.17

+       49.7              0.406              10.25

用完了兩個月的資料,得到了上面的結果,至少說明了在50w資料量以下的資料庫取相同數量的資料在效率方面並沒有什麼顯著區別。實驗中耗時不同主要是因為取的條件不一樣。為了證明在更大資料量的情況下是否也一樣,我又接著插入那些重複的資料(通過上次文章提到的方法,不驗證資料重複性)。當資料總量達到96.6w時,隨便選取了乙個時間範圍的條件取了1w資料,耗時0.452s,還是挺快的,而取全部資料則線性增長到了19.83s。為了驗證是否在1000w條的時候也一樣,我接著插入資料。但是花了幾個小時才插到300w多一點,實在是懶得再插了,就在這個點採了一下資料,其中取1w資料分別用兩種方式,一種是取自增鍵nindex的最後1w條資料,另一種是掐一段時間得1w條資料,分別的耗時是0.31s和0.797,取其平均值勉強得到下表:

+  總資料量(w)   取1w耗時(s)     取全部耗時(s)

+       1                   0.341              0.34

+       10                 0.279            not test

+       36.5              0.407              5.17

+       49.7              0.406              10.25

+       96.6              0.452              19.83

+       308               0.504               64

感覺照這麼下去,取1w的耗時也不會長到哪去,由此實驗做為依據可以推導出:select語句的執行時間只跟取出的資料量成正比,與資料庫的資料總量沒有關係,然後要注意的就是,不同的條件取相同的數量也會得到不同的執行時間,具體原因不得而知。

Firebird資料庫的Select語句

select first 10 skip 8 from t data 跳過前8行不要,取10行,即取第9行到18行共10行 select first 10 from t data 取前10行 select from t data rows 11 to 20 取第11行到20行,共10行,行數從0開始...

從select語句看Oracle資料庫查工作原理

假如,我們現在利用select語句從資料庫查詢資料,oracle資料庫是如何運作的呢?從中我們可以領悟到什麼呢?下面,就結合一條簡單的select語句,看看oracle資料庫後台的運作機制。這對於我們之後的系統管理與故障排除非常有幫助。第一步 客戶端把語句發給伺服器端執行。當我們在客戶端執行sele...

oracle資料庫筆記5(select語句)

oracle中的列不區分大小寫,值區分大小寫 算術表示式 顯示employee表中所有員工的月工資 select empname,basicwage 12 subsidy 12 from employee 給僱傭日期起別名 用 as 或者 別名 或者 select hiredate 僱傭日期 fro...