如何提高sql查詢的效率?
原創猴子聊人物 發布於2019-10-31 21:00:00 閱讀數 11195 收藏
展開【題目】
我們公司的資料量非常大,需要的不僅僅是提取資料,要了解sql方案優化的。一般在寫sql時需要注意哪些問題,可以提高查詢的效率?
【解題思路】
資料量大的情況下,不同的sql語句,消耗的時間相差很大。按下面方法可以提高查詢的效果。
1. select子句中盡量避免使用*
select子句中,*是選擇全部資料的意思。比如語句:「select * from 成績表」,意思是選擇成績表中所有列的資料。
在我們平時的練習中,往往沒有那麼多資料,所以很多同學會圖方便使用*。而在處理公司事務時,動輒十萬、百萬,甚至上千萬的資料,這個時候再用*,那麼接下來的幾分鐘就只能看著電腦螢幕發呆了。
所以,在我們平常的練習中,就要養成好的習慣,最後需要哪些列的資料,就提取哪些列的資料。盡量少用*來獲取資料。
另外,如果select * 用於多表聯結,會造成更大的成本開銷。
2. where子句比較符號左側避免函式
盡量避免在where條件子句中,比較符號的左側出現表示式、函式等操作。因為這會導致資料庫引擎進行全表掃瞄,從而增加執行時間。
按照題目的思路直接書寫,「給每人加5分後,成績90分以上」的條件很多人會這樣寫:
where 成績 + 5 > 90 (表示式在比較符號的左側)
優化方法:
where 成績 > 90 – 5(表示式在比較符號的右側)
所以,為了提高效率,where子句中遇到函式或加減乘除的運算,應當將其移到比較符號的右側。
3. 盡量避免使用in和not in
in和not in也會導致資料庫進行全表搜尋,增加執行時間。
比如,我想看看第8、9個人的學號和成績,大多數同學會用這個語句:
select 學號, 成績 from 成績表 where 學號 in (8, 9)
這一類語句,優化方法如下:
select 學號, 成績 from 成績表 where 學號 between 8 and 9
4. 盡量避免使用or
or同樣會導致資料庫進項全表搜尋。在工作中,如果你只想用or從幾十萬語句中取幾條出來,是非常划不來的,怎麼辦呢?下面的方法可替代or。
從成績表中選出成績是是88分或89分學生的學號:
select 學號 from 成績表 where 成績 = 88 or 成績 = 89
優化後:
select 學號 from 成績表 where 成績 = 88
union
select 學號 from 成績表 where 成績 = 89
語句雖然變長了一點,但處理大量資料時,可以省下很多時間,是非常值得的。
5.使用limit子句限制返回的資料行數
如果前台只需要顯示15行資料,而你的查詢結果集返回了1萬行,那麼這適合最好使用limt子句來限制查詢返回的資料行數。
【本題考點】
在面試中,當面試官提出這一類問題,按照上述的方法進行回答都是沒有問題的,但不僅在面試中,平時練習就養成習慣是最好的。
大多數同學都會覺得「麻煩」、「不做也沒有什麼影響」,但是習慣總是慢慢養成的。
如何提高SQL查詢的效率?
1.select子句中盡量避免使用 select子句中,是選擇全部資料的意思,比如語句 select from 成績表 意思是選擇成績表中所有列的資料 面對動輒十萬 百萬,甚至上千萬的資料,此時需要哪些列的資料,就提取哪些列的資料,盡量少用 來獲取資料 2.where子句比較符號左側避免函式 盡量避...
如何提高SQL語言的查詢效率
由於sql是面向結果而不是面向過程的查詢語言,所以一般支援sql語言的大型關係型資料庫都使用乙個基於查詢成本的優化器,為即時查詢提供乙個最佳的執行策略。對於優化器,輸入是一條查詢語句,輸出是乙個執行策略。一條sql查詢語句可以有多種執行策略,優化器將估計出全部執行方法中所需時間最少的所謂成本最低的那...
如何提高SQL語言的查詢效率
如何 提高sql語言的查詢效率 問 請問我如何才能提高sql語言的查詢效率呢?答 這得從頭說起 由於sql是面向結果而不是面向過程的查詢語言,所以一般支援sql語言的大型關係型資料庫都使用乙個基於查詢成本的優化器,為即時查詢提供乙個最佳的執行策略。對於優化器,輸入是一條查詢語句,輸出是乙個執行策略。...