六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

6個容易的SQL優化 SELECT 語句

[摘要]SELECT語句的性能調優有時是一個非常耗時的任務,在我看來它遵循帕累托原則。20%的努力很可能會給你帶來80%的性能提升,而為了獲得另外20%的性能提升你可能需要花費80%的時間。除非你在金星工作,那里的每一天都等于地球上的243天,否則交付期限很有可能使你沒有足夠的時間來調優SQL查詢。根據我...

SELECT語句的性能調優有時是一個非常耗時的任務,在我看來它遵循帕累托原則。20%的努力很可能會給你帶來80%的性能提升,而為了獲得另外20%的性能提升你可能需要花費80%的時間。除非你在金星工作,那里的每一天都等于地球上的243天,否則交付期限很有可能使你沒有足夠的時間來調優SQL查詢。

根據我多年編寫和運行SQL語句的經驗,我開始開發一個檢查列表,當我試圖提高查詢性能時供我參考。在進行查詢計劃和閱讀我使用的數據庫文檔之前,我會參考其中的內容,數據庫文檔有時會很復雜。我的檢查列表絕對說不上全面或科學,它更像是一個保守計算,但我可以說,遵循這些簡單的步驟大部分時間我確實能得到性能提升。檢查列表如下。

檢查索引

在SQL語句的WHERE和JOIN部分中用到的所有字段上,都應該加上索引。進行這個3分鐘SQL性能測試。不管你的成績如何,一定要閱讀那些帶有信息的結果。

限制工作數據集的大小

檢查那些SELECT語句中用到的表,看看你是否可以應用WHERE子句進行過濾。一個典型的例子是,當表中只有幾千行記錄時,一個查詢能夠很好地執行。但隨著應用程序的成長,查詢慢了下來。解決方案或許非常簡單,限制查詢來查看當前月的數據即可。

當你的查詢語句帶有子查詢時,注意在子查詢的內部語句上使用過濾,而不是在外部語句上。

只選擇你需要的字段

額外的字段通常會增加返回數據的紋理,從而導致更多的數據被返回到SQL客戶端。另外:

?使用帶有報告和分析功能的應用程序時,有時報告性能低是因為報告工具必須對收到的、帶有詳細形式的數據做聚合操作。

?偶爾查詢也可能運行地足夠快,但你的問題可能是一個網絡相關的問題,因為大量的詳細數據通過網絡發送到報告服務器。

?當使用一個面向列的DBMS時,只有你選擇的列會從磁盤讀取。在你的查詢中包含的列越少,IO開銷就越小。

移除不必要的表

移除不必要的表的原因,和移除查詢語句中不需要的字段的原因一致。

編寫SQL語句是一個過程,通常需要大量編寫和測試SQL語句的迭代過程。在開發過程中,你可能將表添加到查詢中,而這對于SQL代碼返回的數據可能不會有任何影響。一旦SQL運行正確,我發現許多人不會回顧他們的腳本,不會刪除那些對最終的返回數據沒有任何影響和作用的表。通過移除與那些不必要表的JOINS操作,你減少了大量數據庫必須執行的流程。有時,就像移除列一樣,你會發現你減少的數據又通過數據庫返回來了。

移除外部連接查詢

這說起來容易做起來難,它取決于改變表的內容有多大的影響。一個解決辦法是通過在兩個表的行中放置占位符來刪除OUTER JOINS操作。假設你有以下的表,它們通過定義OUTER JOINS來確保返回所有的數據:

CUSTOMER_IDCUSTOMER_NAME
1John Doe
2Mary Jane
3Peter Pan
4Joe Soap
CUSTOMER_IDSALES_PERSON
NULLNewbee Smith
2Oldie Jones
1Another Oldie
NULLGreenhorn

解決辦法是在customer表的行中增加一個占位符,并更新sales表中的所有NULL值到占位符。

CUSTOMER_IDCUSTOMER_NAME
0NO CUSTOMER
1John Doe
2Mary Jane
3Peter Pan
4Joe Soap
CUSTOMER_IDSALES_PERSON
0Newbee Smith
2Oldie Jones
1Another Oldie
0Greenhorn

你不只是刪除了對OUTER JOIN操作的依賴,同時標準化了沒有客戶的銷售人員如何表示。其他開發人員不必編寫額外語句,例如ISNULL(customer_id, “No customer yet”)。

刪除JOIN和WHERE子句中的計算字段

這是另外一個有時可能說起來容易做起來難的技巧,它取決于你更改表模式的權限大小。可以將連接語句中用到的計算字段作為一個新字段在表中創建。給出以下SQL語句:

FROM sales a 
JOIN budget b ON    ((YEAR(a.sale_date)* 100) + MONTH(a.sale_date)) = b.budget_year_month

在sales表中利用年和月增加一列,可以提高性能。更新后的SQL語句將如下:

SELECT * FROM PRODUCTSFROM sales a 
JOIN budget b ON    a.sale_year_month = b.budget_year_month

總結

上邊的建議可以歸結為以下幾點:

?檢查索引

?在所需要的最小數據集上操作

?移除不必要的字段和表

?移除你JOIN和WHERE子句中的計算操作

如果所有的這些建議都沒能提高你的SQL查詢性能,最后一個建議是搬去金星吧。你需要的就是一天能調優你的SQL語句。

以上就是6個簡單的SQL優化 SELECT 語句的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 午夜影院私人 | 四虎影院观看视频在线观看 | 亚洲韩国日本欧美一区二区三区 | 日本理论视频 | 欧美怡春院一区二区三区 | 色综合久久久久久久久久久 | 色姣姣狠狠撩综合网 | 日本在线www | 深夜成人福利 | 亚洲综合射 | 日韩欧美福利 | 五月天久久婷婷 | 四虎私人影院 | 日韩看片 | 日韩毛片免费线上观看 | 五月激情站 | 亚洲乱码一二三四区麻豆 | 亚洲天堂免费观看 | 欧美一区二区三区东南亚 | 中日韩国语视频在线观看 | 亚洲三级一区 | 欧美在线xx | 日韩精品中文字幕一区三区 | 亚洲视频在线免费播放 | 午夜影视网| 天天干天天操天天插 | 热久久中文字幕 | 欧美丝袜一区 | 伊人婷婷色 | 最新欧美精品一区二区三区不卡 | 午夜神器成在线人成在线人免费 | 色域综合网 | 欧美限制级在线观看 | 色视频在线观看免费 | 色综合天 | 青草影院在线观看免费版 | 色噜噜狠狠在爱丁香 | 我要看一级黄色 | 午夜看毛片 | 欧洲亚洲一区二区三区 | 亚洲国产精品线在线观看 |