数据库的优化tips
生活随笔
收集整理的這篇文章主要介紹了
数据库的优化tips
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
數據庫 ? TIPS::
1、用于記錄或者是數據分析的表創建時::使用Id作為主鍵,1,2,3...表示消息條數。用戶賬號id用于做外鍵。一個用戶相應唯一個accountId
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個accountId能夠相應多條數據;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
2、創建索引:: ? ?比如須要依據注冊版本和注冊游戲ID來查詢另外一些字段的時候,就能夠依據版本和游戲ID來創建索引::相當于就是依據查詢條件來建索引。
3、數據庫查詢優化:: ?(1)、慎用 SELECT DISTINCT。從記錄集中排除反復記錄時,才使用DISTINCT;
? ? ?(2)、選擇最優效率的表名順序 SQLSERVER從右到左的順序處理FROM子句中的表名;當from子句中包括多個表的情況下,必須選擇記錄最少的表作為基礎表,即把數據少的表放在最后;(注:有三個以上的表連接查詢,則須要選擇交叉表作為基礎表)
? ? ?
4、使用表的別名(Alias)::連接多個表是,使用別名把別名前綴于每一個Column上
5、最好使用可SARG作為WHERE搜索條件:: ? ? ? ?比如列和常量之間的比較。在WHERE子句里不可SARG的搜索條件如"IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE"和"LIKE '%500'"。通常(但不總是)會阻止查詢優化器使用索引運行搜索。另外在列上使用包含函數的表達式、兩邊都使用同樣列的表達式、或和一個列(不是常量)比較的表達式,都是不可SARG的。 ? (注::假設你不知道特定的WHERE查詢字句是不是可SARG。能夠在查詢分析器里檢查查詢運行計劃)
6、WHERE字句中的連接順序:: ? ? ? SQLSERVER採用自下而上的順序解析WHERE字句,所以表之間的連接必須寫在其它WHERE條件之前。能夠過濾最多數據記錄的條件必須寫在WHERE子句的末尾。 ?
7、避免使用困難的正規表達式:: ?
8、 避免對大型數據表行數據的順序存取:: ? ?
9、正確使用UNION和UNION ALL:: 使用UNION時、相當于在結果集上運行SELECT DISTINT。UNION將聯合兩個相類似的記錄表,然后搜索反復的記錄并排除。;; 假設搜索的聯合記錄集中木有反復記錄,則使用UNION ALL。 ? ? ?
10、EXISTS和IN的使用:: ?基于基礎表的查詢中。為了滿足一個條件,往往須要對還有一個表進行連接。在這樣的情況下,使用EXISTS(或NOT EXISTS)通常將提高查詢的效率。
1、用于記錄或者是數據分析的表創建時::使用Id作為主鍵,1,2,3...表示消息條數。用戶賬號id用于做外鍵。一個用戶相應唯一個accountId
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個accountId能夠相應多條數據;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
2、創建索引:: ? ?比如須要依據注冊版本和注冊游戲ID來查詢另外一些字段的時候,就能夠依據版本和游戲ID來創建索引::相當于就是依據查詢條件來建索引。
3、數據庫查詢優化:: ?(1)、慎用 SELECT DISTINCT。從記錄集中排除反復記錄時,才使用DISTINCT;
? ? ?(2)、選擇最優效率的表名順序 SQLSERVER從右到左的順序處理FROM子句中的表名;當from子句中包括多個表的情況下,必須選擇記錄最少的表作為基礎表,即把數據少的表放在最后;(注:有三個以上的表連接查詢,則須要選擇交叉表作為基礎表)
? ? ?
4、使用表的別名(Alias)::連接多個表是,使用別名把別名前綴于每一個Column上
5、最好使用可SARG作為WHERE搜索條件:: ? ? ? ?比如列和常量之間的比較。在WHERE子句里不可SARG的搜索條件如"IS NULL", "<>", "!=", "!>", "!<", "NOT", "NOT EXISTS", "NOT IN", "NOT LIKE"和"LIKE '%500'"。通常(但不總是)會阻止查詢優化器使用索引運行搜索。另外在列上使用包含函數的表達式、兩邊都使用同樣列的表達式、或和一個列(不是常量)比較的表達式,都是不可SARG的。 ? (注::假設你不知道特定的WHERE查詢字句是不是可SARG。能夠在查詢分析器里檢查查詢運行計劃)
6、WHERE字句中的連接順序:: ? ? ? SQLSERVER採用自下而上的順序解析WHERE字句,所以表之間的連接必須寫在其它WHERE條件之前。能夠過濾最多數據記錄的條件必須寫在WHERE子句的末尾。 ?
7、避免使用困難的正規表達式:: ?
8、 避免對大型數據表行數據的順序存取:: ? ?
9、正確使用UNION和UNION ALL:: 使用UNION時、相當于在結果集上運行SELECT DISTINT。UNION將聯合兩個相類似的記錄表,然后搜索反復的記錄并排除。;; 假設搜索的聯合記錄集中木有反復記錄,則使用UNION ALL。 ? ? ?
10、EXISTS和IN的使用:: ?基于基礎表的查詢中。為了滿足一個條件,往往須要對還有一個表進行連接。在這樣的情況下,使用EXISTS(或NOT EXISTS)通常將提高查詢的效率。
11、用存儲過程取代直接寫查詢語句::降低網絡流量和響應時間,提升應用程序性能;
? ?
12、存儲過程名不要以sp_開頭::這個特別的前綴是為系統存儲過程保留的,用戶定義的存儲過的執行,會略微減少一些執行效率。
13、存儲古城的擁有者要同樣:: ? ? ?同一存儲過程里調用的全部對象的擁有者都應該同樣,DBO更合適。
14、讓食物盡可能的短:: 保持TSQL事務盡可能的短。這會降低鎖的數量。
15、tinyint(0-255、-128 - 127 1字節)。smallint(0-65535、-32768 - 32767 2字節)
? ? mediumint(0-16777215,-8388608 - 8388607 4字節);int(0-4294967295、-2147483648 - 2147483647 8字節)
總結
以上是生活随笔為你收集整理的数据库的优化tips的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql全局权限账户%登录不上ERRO
- 下一篇: android中对Toast的简单封装