sqlsql性能調優
㈠ sql調優的幾種方式
你好,
SQL優化的一些方法
1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描。
3.應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。
4.應盡量避免在 where 子句中使用 or 來連接條件,否則將導致引擎放棄使用索引而進行全表掃描。
5.in 和 not in 也要慎用,否則會導致全表掃描,
6.下面的查詢也將導致全表掃描:
select id from t where name like '%abc%'
7.應盡量避免在 where 子句中對欄位進行表達式操作,這將導致引擎放棄使用索引而進行全表掃描。
8.應盡量避免在where子句中對欄位進行函數操作,這將導致引擎放棄使用索引而進行全表掃描。
9.不要在 where 子句中的「=」左邊進行函數、算術運算或其他表達式運算,否則系統將可能無法正確使用索引。
10.在使用索引欄位作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第一個欄位作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓欄位順序與索引順序相一致。
㈡ GBase8s資料庫SQL語句性能緩慢從哪個方面入手分析
在實際的生產運行環境中,很多客戶現場都看到開發人員和系統管理人員遇到很多有關於GBase 8s 資料庫引起的性能問題,進而被多次問起如何進行GBase 8s 資料庫性能調優,
性能優化原則
包括:
性能規劃:深入了解應用與資料庫的交互特徵,確立良好的設計、開發、測試迭代過程,上線前消除模型上的性能瓶頸。
實例調優:建立性能基準,對比調節資料庫、操作系統、存儲、網路等的配置,主動監控、消除瓶頸。
SQL 調優:書寫高效 SQL,優化相關資料庫對象,充分藉助優化器,確定最佳執行計劃。
性能優化流程
首先執行下面的初始檢查:
– 獲取直接用戶的使用反饋,確定性能目標和范圍。
– 獲取性能表現好與壞時的操作系統、資料庫、應用統計信息。
– 對資料庫做一次全面健康檢查。
根據收集的信息,以及對應用特性的了解,構建性能概念模型,明確性能瓶頸所在,以及導致性能的根本原因。
– 首先應該排除操作系統、硬體資源造成的瓶頸。
– 然後針對資料庫系統性能進行分析
– 必要時,還需要檢查應用日誌,因為系統性能問題也可能由於應用非 SQL 部分造成瓶頸。
提出一系列針對的優化措施,並根據它們對性能改善的重要程度排序,然後逐一加以實施。不要一次執行所有的優化措施,必須逐條嘗試,逐步對比。
通過獲取直接用戶的反饋驗證調節是否已經產生預期的效果,否則,需要重新提煉性能概念模型,直到對應用特性了解進一步准確。
重復上述,直到性能達到目標或由於客觀約束無法進一步優化。
常見調優技巧
找到 CPU 佔用最高的 SQL
在 sysmaster 庫中執行
select sqx_estcost, sqx_sqlstatement
from syssqexplain
order by sqx_estcost desc
1
2
3
注意:此時看到的僅僅是當前正在執行的 SQL
需要多看幾次
onstat 命令
onstat -g act 得到當前正在執行的 SQL
根據 rstcb 列
onstat -u | grep 57c68220
1
從第三列 sessid 得到 SESSION
onstat -g ses SESSION 即可得到當時正在執行的 SQL
一般多找幾個 threads 後,就基本可以確定問題 SQL
得到 SQL 後,利用 set explain on 分析其查詢路徑,看是否未利用索引,在對大表進行全表掃描,根據需要創建相應索引。
找到全表掃描較多的表及其 SQL
得到全表掃描較多的表
-- 系統順序掃描較多時,被多次順序掃描的大表,如果有,應該考慮增加索引
select first 5
substr(t.tabname,0,20) tabname,
substr(dbsname,0,10) dbname,
nrows*rowsize*p.seqscans costs,
substr(p.seqscans,0,8) seqscans,
substr(nrows,0,8) nrows
from sysmaster:sysptprof p , systables t,sysmaster:sysprofile s
where p.tabname = t.tabname
and p.seqscans > s.value/50
and s.name = 'seqscans'
--and s.value > 2000000 and nrows > 2000
order by 3 desc
1
2
3
4
5
6
7
8
9
10
11
12
13
利用 onstat –g ses 0 –r 5/ onstat –g stm 的輸出信息,根據表名,找到可能的 SQL 語句。由於以上獲取 SQL 的辦法是有局限的,如果無法獲取,建議通過查看應用日誌或聯系開發人員查看源代碼的方式來找到。
利用 set explain on 分析其查詢路徑,確認是在對表進行全表掃描,根據需要創建相應索引。
㈢ sql語句性能如何優化
如何加快查詢速度?
1、升級硬體
2、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。
3、擴大伺服器的內存
4、增加伺服器CPU個數
5、對於大的資料庫不要設置資料庫自動增長,它會降低伺服器的性能
6、在查詢Select語句中用Where字句限制返回的行數,避免表掃描,如果返回不必要的數據,浪費了伺服器的I/O資源,加重了網路的負擔降低性能。如果表很大,在表掃描的期間將表鎖住,禁止其他的聯接訪問表,後果嚴重。
7、查詢時不要返回不需要的行、列
8、用select top 100 / 10 Percent 來限制用戶返回的行數或者SET ROWCOUNT來限制操作的行
9、在IN後面值的列表中,將出現最頻繁的值放在最前面,出現得最少的放在最後面,減少判斷的次數
10、一般在GROUP BY 個HAVING字句之前就能剔除多餘的行,所以盡量不要用它們來做剔除行的工作。他們的執行順序應該如下最優:
select的Where字句選擇所有合適的行,Group By用來分組個統計行,Having字句用來剔除多餘的分組。這樣Group By 個Having的開銷小,查詢快.對於大的數據行進行分組和Having十分消耗資源。如果Group BY的目的不包括計算,只是分組,那麼用Distinct更快
11、一次更新多條記錄比分多次更新每次一條快,就是說批處理好
㈣ SQL常見優化Sql查詢性能的方法有哪些
SQL常見優化Sql查詢性能的方法有哪些
可以通過如下方法來優化查詢 1、把數據、日誌、索引放到不同的I/O設備上,增加讀取速度,以前可以將Tempdb應放在RAID0上,SQL2000不在支持。數據量(尺寸)越大,提高I/O越重要. 2、縱向、橫向分割表,減少表的尺寸(sp_spaceuse) 3、升級硬體 4、根據查詢條件,建立索引,優化索引、優化訪問方式,限制結果集的數據量。注意填充因子要適當(最好是使用默認值0)。索引應該盡量小,使用位元組數小的列建索引好(參照索引的創建),不要對有限的幾個值的欄位建單一索引如性別欄位