天天看點

你對SQL性能優化知識知多少?

你對SQL性能優化知識知多少?

轉自:http://www.vaikan.com/what-do-you-know-about-sql-performance/ 

“SQL性能優化是一種黑魔法 就像煉金術一樣: 各種配方難解晦澀, 隻有一小部分圈内人才能了解。”

這是一種誤解,SQL資料庫使用的是大家公知的算法來實作可以預期的執行性能。然而,問題是,人們很容易寫出不能發揮最高效算法的SQL查詢語句,因而也容易産生無法預期的性能結果。

下面是5道關于SQL性能優化小測試題,這些測試題也許會讓你堅信SQL優化就是一種黑魔法。但答案中提供的解釋說明會随即讓你明白,這些所謂的黑魔法其實是純粹的科學。

本測試中使用的SQL是基于Oracle資料庫。

你對SQL性能優化知識知多少?

當表字段放到函數裡執行查詢時,索引将不起作用,效率更高的寫法如圖:

你對SQL性能優化知識知多少?
你對SQL性能優化知識知多少?

這個SQL語句将會按照經過索引的

Top-N 查詢方式執行,它的效率跟<code> INDEX UNIQUE SCAN</code>是等效的,是以會非常快。

你對SQL性能優化知識知多少?

建立的索引隻能用于第一個查詢,第二個SQL無法利用索引提高效率。

你對SQL性能優化知識知多少?

like對應的查詢字元如果是以通配符開頭的,索引将無法發揮效能。也沒有一個簡單的方法來優化這種SQL

你對SQL性能優化知識知多少?

而當我們隻需要從百萬行資料中查詢出10行時,SQL可以改成這樣:

你對SQL性能優化知識知多少?

在前一種查詢中,索引覆寫了所有的查詢字段,執行效能會非常高,而修改後的SQL,雖然傳回的資料變少了,但新增的B字段并沒有索引。