3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

Zi 字媒體

2017-07-25T20:27:27+00:00
加入好友
[加快SQL 搜尋] SQL海量資料優化 資料來源:http://fecbob.pixnet.net/blog/post/39073559 01.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全資料表掃描          select id from t where num is null     可以在num上設置預設值0,確保表中num列沒有null值,然後這樣查詢   02.應儘量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全資料表掃描。優化器將無法通過索引來確定將要命中的行數,因此需要搜索該表的所有行。   03.應儘量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全資料表掃描,如:     select id from t where num=10 or num=20     可以這樣查詢:     select id from t where num=10     union all     select id from t where num=20      04.in 和 not in 也要慎用,因為IN會使系統無法使用索引,而只能直接搜索表中的資料。如:          select id from t where num in(1,2,3)     對於連續的數值,能用 between 就不要用 in 了:     select id from t where num between 1 and 3   05.儘量避免在索引過的字元資料中,使用非打頭字母搜索。這也使得引擎無法利用索引。[很難]     見如下例子:     SELECT * FROM T1 WHERE NAME LIKE ‘%L%’     SELECT * FROM T1 WHERE SUBSTING(NAME,2,1)=’L’     SELECT * FROM T1 WHERE NAME LIKE ‘L%’     即使NAME欄位建有索引,前兩個查詢依然無法利用索引完成加快操作,引擎不得不對全表所有資料逐條操作來完成任務。而第三個查詢能夠使用索引來加快操作。   06.應儘量避免在 where 子句中對欄位進行運算式操作,這將導致引擎放棄使用索引而進行全資料表掃描。          SELECT * FROM T1 WHERE F1/2=100   07.應儘量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全資料表掃描   08.不要在 where 子句中的「=」左邊進行函數、算數運算或其他運算式運算,否則系統將可能無法正確使用索引。   09.避免頻繁創建和刪除臨時表,以減少系統表資源的消耗。   10.充分利用連接條件,在某種情況下,兩個表之間可能不只一個的連接條件,這時在 WHERE 子句中將連接條件完整的寫上,有可能大大提高查詢速度。          例:     SELECT SUM(A.AMOUNT) FROM ACCOUNT A,CARD B WHERE A.CARD_NO = B.CARD_NO     SELECT SUM(A.AMOUNT) FROM ACCOUNT A,CARD B WHERE A.CARD_NO = B.CARD_NO AND A.ACCOUNT_NO=B.ACCOUNT_NO   11. 使用視圖加速查詢   12.能用DISTINCT的就不用GROUP BY   13.能用UNION ALL就不要用UNION   14.使用連接(JOIN)來代替子查詢(Sub-Queries)     15.使用聯合(UNION)來代替手動創建的臨時表            

本文由jashliaoeuwordpress提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦