查詢優化與視圖

查詢記錄可以有多種方法,但是不同的方法在效率上有着千差萬別.

在記錄多的情況下,尤爲明顯.

下面舉一個例子
表1 articles:字段(id   title    time    posterID)

表2  users  :字段(id    name    password)

查詢某人編輯的所有文章的標題.

假設表articles 有3000條記錄   users有100條記錄

方法一:
SELECT title  FROM article,users  WHERE posterID = users.id AND users.name='XX';

方法二:
SELECT title FROM article WHERE posterID IN (SELECT id FROM users WHERE name = 'XX');

這兩個語句的執行結果是一樣的.但效果卻有很大的區別

方法一使用鏈接,計算這個語句是在3000 * 100 = 30 0000 記錄中查找與條件匹配的記錄.

方法二很簡單,先是在表users  100條記錄中查找匹配的id,然後再在article 3000條記錄中找
即3000 + 100 =3100

相差近100倍.如果有索引那更快.


---------------------------------------------------------------------------------------------------------------------

在n種中你選擇了最好的方法了,但是這是最好的方法嗎?

如果哪天你發現,還有個更好的方法那怎麼辦?

改!那麼你就要把所有的程序裏的sql語句重新寫過.煩!

而最好的辦法是,建立一個視圖.

程序的所有操作基於視圖.像上例 可以建立一個 僅 title字段的視圖.

CREATE VIEW  v_title AS ( SELECT title  FROM article,users  WHERE posterID = users.id AND users.name='XX';)

而程序設計中都用select title from v_title;

當發現一個更好的查詢方法後,你只要修改視圖.而程序不用修改,就能運行了.

CREATE VIEW  v_title AS (SELECT title FROM article WHERE posterID IN (SELECT id FROM users WHERE name = 'XX'))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章