SQL(select)語句最佳化之六條

來源:互聯網
上載者:User

一,關於索引:

使用索引的合理性:

條件子句中變數順序應與索引字鍵順序相同。(儘可能在join和order by 的欄位上建立索引)將最具有限制性的條件放在前面,大值在前,小值在後。

eg:…where O.a <1000 and O.a>200 效率高於 where O.a>200 and O.a<1000

…where O.a between 200 and 1000 效率高於 where O.a>200 and O.a<1000

二,關於萬用字元:

避免採用MATCHES和LIKE萬用字元匹配查詢:

由於採用like等萬用字元查詢時,sql最佳化器實際上還是用順序搜尋的方法來查詢的,也就是說,在被查詢的欄位上建立的索引實際上是不起作用的。

eg:…where O.b <'12399' and O.b>'123000 ' 效率高於 where O.b matche '123*'

三,關於子查詢:

查詢嵌套層次越多,效率越低,因此應當盡量避免子查詢。假如子查詢不可避免,那麼要在子查詢中過濾掉儘可能多的行。

eg:…from O1,O2 where O1.c=O2.c and O2.a=2009 效率高於 from O1 where O1.c in(select O2.c from O2 where O2.a=2009)

四,關於順序存取時的巢狀查詢:

在進行大資料量的索引歸類時,有些形式的where子句會強迫最佳化器使用順序存取,從而使得原索引欄位失效。

eg:…where (O.d = 123 and O.a>200 ) union O.b=1010 效率高於 where (O.d = 123 and O.b>200) or O.b=1010

五,關於暫存資料表:

使用暫存資料表加速查詢

把表的一個子集進行排序並建立暫存資料表,有時能加速查詢。注意:暫存資料表建立後不會反映主表的修改。在主表中資料頻繁修改的情況下,注重不要遺失資料。

eg:…select unique tO1 into temp tO1 "然後(then)"select count(*)from temp tO1 效率高於select count(distinct)

六,關於聚集合函式:

1.對於大資料量的求和應避免使用單一的sum命令處理,可採用group by方式與其結合,有時會大大提高效率。

2.避免會引起磁碟讀寫的 rowid* 等操作。在where子句中或select語句中,用rowid要產生磁碟讀寫,是一個物理過程,會影響sql效能。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.