![](/img/trans.png)
[英]Does time taken by an SQL query to give the result depend on total number of rows in the table or on the final number of rows which is the result?
[英]Does the speed of the query depend on the number of rows in the table?
假設我有這個問題:
select * from table1 r where r.x = 5
此查詢的速度是否取決於table1
中存在的行數?
查詢速度有很多因素,其中一個可以是行數。
其他包括:
對於表中包含大量行的數據庫,通常需要考慮分區(從SQL Server 2005開始,Enterprise Edition有內置支持)。 這是將數據拆分為更小的單位。 通常,較小的單位=較小的表=較小的索引=較好的性能。
是的,它可能非常重要。
如果有1億行,SQL服務器必須遍歷每個行並查看它是否匹配。 與10行相比,這需要更多的時間。
你可能想要'x'列上的索引,在這種情況下,sql server可能會檢查索引而不是遍歷所有行 - 這可能會明顯更快,因為sql server可能甚至不需要檢查所有的值指數。
另一方面,如果有1億行匹配x = 5,則它比10行慢。
幾乎總是肯定的。 真正的問題是:隨着表格大小的增加,查詢速度會降低多少? 答案是:如果rx被索引,則不是很多,如果不是,則大量的。
不是行(在某種程度上當然)本身,但數據量(列)是可以使查詢變慢的原因。 數據也需要從后端傳輸到前端。
答案是肯定的。 但不是唯一的因素。 如果您進行了適當的優化並且調整性能下降將是可忽略不計的主要性能因素
還有一些其他因素,但主要考慮這些因素。 甚至你如何設計Schema也會影響性能。
您應該假設您的查詢總是取決於行數。 實際上,您應該假設最壞的情況(您提供的示例的線性或O(N)
)和更復雜查詢的指數。 有一些數據庫特定的手冊充滿了技巧,以幫助您避免最壞的情況,但SQL本身是一種語言,並沒有指定如何執行您的查詢。 相反,數據庫實現決定如何執行任何給定的查詢:如果您已在數據庫中索引了一列或一組列,那么您將獲得簡單查找的O(log(N))
性能; 如果系統具有有效的查詢緩存,則可能會得到O(1)
響應。 這是一篇很好的介紹性文章: 高可伸縮性:SQL和計算復雜性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.