查詢記錄可以有多種方法,但是不同的方法在效率上有着千差萬別.
在記錄多的情況下,尤爲明顯.
下面舉一個例子
表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'))
查詢優化與視圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.