九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区
打開APP
未登錄
開通VIP,暢享免費電子書等14項超值服
開通VIP
首頁
好書
留言交流
下載APP
聯(lián)系客服
SQL語句效率
小朋
>《數(shù)據(jù)庫技術(shù)》
2006.11.02
關(guān)注
SQL語句效率
1. SQL優(yōu)化的原則是:將一次操作需要讀取的BLOCK數(shù)減到最低,即在最短的時間達到最大的數(shù)據(jù)吞吐量。
調(diào)整不良SQL通常可以從以下幾點切入:
檢查不良的SQL,考慮其寫法是否還有可優(yōu)化內(nèi)容
檢查子查詢 考慮SQL子查詢是否可以用簡單連接的方式進行重新書寫
檢查優(yōu)化索引的使用
考慮數(shù)據(jù)庫的優(yōu)化器
2. 避免出現(xiàn)SELECT * FROM table 語句,要明確查出的字段。
3. 在一個SQL語句中,如果一個where條件過濾的數(shù)據(jù)庫記錄越多,定位越準確,則該where條件越應(yīng)該前移。
4. 查詢時盡可能使用索引覆蓋。即對SELECT的字段建立復合索引,這樣查詢時只進行索引掃描,不讀取數(shù)據(jù)塊。
5. 在判斷有無符合條件的記錄時建議不要用SELECT COUNT (*)和select top 1 語句。
6. 使用內(nèi)層限定原則,在拼寫SQL語句時,將查詢條件分解、分類,并盡量在SQL語句的最里層進行限定,以減少數(shù)據(jù)的處理量。
7. 應(yīng)絕對避免在order by子句中使用表達式。
8. 如果需要從關(guān)聯(lián)表讀數(shù)據(jù),關(guān)聯(lián)的表一般不要超過7個。
9. 小心使用 IN 和 OR,需要注意In集合中的數(shù)據(jù)量。建議集合中的數(shù)據(jù)不超過200個。
10. <> 用 < 、 > 代替,>用>=代替,<用<=代替,這樣可以有效的利用索引。
11. 在查詢時盡量減少對多余數(shù)據(jù)的讀取包括多余的列與多余的行。
12. 對于復合索引要注意,例如在建立復合索引時列的順序是F1,F(xiàn)2,F(xiàn)3,則在where或order by子句中這些字段出現(xiàn)的順序要與建立索引時的字段順序一致,且必須包含第一列。只能是F1或F1,F(xiàn)2或F1,F(xiàn)2,F(xiàn)3。否則不會用到該索引。
13.多表關(guān)聯(lián)查詢時,寫法必須遵循以下原則,這樣做有利于建立索引,提高查詢效率。格式如下select sum(table1.je) from table1 table1, table2 table2, table3 table3 where (table1的等值條件(=)) and (table1的非等值條件) and (table2與table1的關(guān)聯(lián)條件) and (table2的等值條件) and (table2的非等值條件) and (table3與table2的關(guān)聯(lián)條件) and (table3的等值條件) and (table3的非等值條件)。
注:關(guān)于多表查詢時from 后面表的出現(xiàn)順序?qū)π实挠绊戇€有待研究。
14. 子查詢問題。對于能用連接方式或者視圖方式實現(xiàn)的功能,不要用子查詢。例如:select name from customer where customer_id in ( select customer_id from order where money>1000)。應(yīng)該用如下語句代替:select name from customer inner join order on customer.customer_id=order.customer_id where order.money>100。
15. 在WHERE 子句中,避免對列的四則運算,特別是where 條件的左邊,嚴禁使用運算與函數(shù)對列進行處理。比如有些地方 substring 可以用like代替。
16. 如果在語句中有not in(in)操作,應(yīng)考慮用not exists(exists)來重寫,最好的辦法是使用外連接實現(xiàn)。
17. 對一個業(yè)務(wù)過程的處理,應(yīng)該使事物的開始與結(jié)束之間的時間間隔越短越好,原則上做到數(shù)據(jù)庫的讀操作在前面完成,數(shù)據(jù)庫寫操作在后面完成,避免交叉。
18. 請小心不要對過多的列使用列函數(shù)和order by,group by等,謹慎使用disti軟件開發(fā)t。
19. 用union all 代替 union,數(shù)據(jù)庫執(zhí)行union操作,首先先分別執(zhí)行union兩端的查詢,將其放在臨時表中,然后在對其進行排序,過濾重復的記錄。
當已知的業(yè)務(wù)邏輯決定query A和query B中不會有重復記錄時,應(yīng)該用union all代替union,以提高查詢效率。
數(shù)據(jù)更新的效率
1. 在一個事物中,對同一個表的多個insert語句應(yīng)該集中在一起執(zhí)行。
2. 在一個業(yè)務(wù)過程中,盡量的使insert,update,delete語句在業(yè)務(wù)結(jié)束前執(zhí)行,以減少死鎖的可能性。
數(shù)據(jù)庫物理規(guī)劃的效率
為了避免I/O的沖突,我們在設(shè)計數(shù)據(jù)庫物理規(guī)劃時應(yīng)該遵循幾條基本的原則(以O(shè)RACLE舉例):
table和index分離:table和index應(yīng)該分別放在不同的tablespace中。
Rollback Segment的分離:Rollback Segment應(yīng)該放在獨立的Tablespace中。
System Tablespace的分離:System Tablespace中不允許放置任何用戶的object。(mssql中primary filegroup中不允許放置任何用戶的object)
Temp Tablesace的分離:建立單獨的Temp Tablespace,并為每個user指定default Temp Tablespace
避免碎片:但segment中出現(xiàn)大量的碎片時,會導致讀數(shù)據(jù)時需要訪問的block數(shù)量的增加。對經(jīng)常發(fā)生DML操作的segemeng來說,碎片是不能完全避免的。所以,我們應(yīng)該將經(jīng)常做DML操作的表和很少發(fā)生變化的表分離在不同的Tablespace中。
當我們遵循了以上原則后,仍然發(fā)現(xiàn)有I/O沖突存在,我們可以用數(shù)據(jù)分離的方法來解決。
連接Table的分離:在實際應(yīng)用中經(jīng)常做連接查詢的Table,可以將其分離在不同的Taclespace中,以減少I/O沖突。
使用分區(qū):對數(shù)據(jù)量很大的Table和Index使用分區(qū),放在不同的Tablespace中。
在實際的物理存儲中,建議使用RAID。日志文件應(yīng)放在單獨的磁盤中。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
數(shù)據(jù)庫面試題
ORACLE SQL*PLUS
sql面試題
SQL總結(jié)
數(shù)據(jù)庫經(jīng)典筆試題總結(jié)
數(shù)據(jù)庫sql常見優(yōu)化方法
更多類似文章 >>
生活服務(wù)
熱點新聞
首頁
萬象
文化
人生
生活
健康
教育
職場
理財
娛樂
藝術(shù)
上網(wǎng)
留言交流
回頂部
聯(lián)系我們
分享
收藏
點擊這里,查看已保存的文章
導長圖
關(guān)注
一鍵復制
下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面
先別劃走!
送你5元優(yōu)惠券,購買VIP限時立減!
5
元
優(yōu)惠券
優(yōu)惠券還有
10:00
過期
馬上使用
×