一般的資訊系統都會存在查詢資料庫的要求。查詢速度的快慢直接影響系統壓力測試的結果。通常情況下,為了提高查詢速度,系統修改的順序為:sql語句優化-〉資料庫優化-〉作業系統優化,實際上還有乙個方面:系統架構優化。但系統架構優化一般代價比較大,起碼要專案經理拍板才能執行,所以在這裡就不多說了。
對於一般的開發人員接觸到最多的當屬sql語句優化。而sql語句優化中除了對sql語句本身的優化以外,建立合適的索引是較常用的方法。索引通常分為聚集索引和非聚集索引。
聚集索引表示表中儲存的資料按照該索引的順序儲存,檢索效率比普通索引高,但對資料新增/修改/刪除的影響比較大,乙個表只能存在乙個聚集索引。如果沒有特地的修改,主鍵都是聚集索引。
相對應的非聚集索引不影響表中的資料儲存順序,檢索效率比聚集索引低,但對資料新增/修改/刪除的影響很少。
建立索引的原則總結如下:
首先要判斷表的儲存資料量大小、高效能的操作要求(是頻繁增刪改操作還是頻繁的查詢操作)。對於要求頻繁增刪改操作的表,建立索引可能只會起到反作用。
1. 對於只有幾
十、幾百條記錄的表,建立索引的效果可能還不如逐行掃瞄來得快
2. 對於只有幾個可能值的字段,最常見的如性別等字段,建立索引是無意義的
3. 對於在查詢語句的where子句中頻繁出現的字段可以建立索引,但注意如果索引欄位上存在函式,該索引失效。如:where substr(name,1)=』n』;name欄位上的索引不會起作用,改寫成where name like 『n%』, name欄位上的索引才能生效。另外is null和is not null也會使索引失效
4. 適量的冗餘字段可以減小查詢的開銷,雖然這樣做不符合資料庫正規化的要求
5. 建立在大資料型別欄位上的索引沒有意義,比如sqlserver的image,oracle的lob
目前市面上的查詢優化器很多,如sql expert等,最直接的方法莫過於用這些工具試驗怎樣的索引最有效率
資料查詢優化
一 避免全表掃瞄 首先考慮在where及order by涉及的列上建立索引 避免在where子句中對字段進行null判斷這樣會導致全表掃瞄 二 避免出現where子句中對字段進行null值判斷 demo select id from t where num is null可以替換為select id...
資料查詢 建立索引
為了提公升我們查詢某個欄位的效率,我們可以對這個字段採用特殊的資料結構,那就是索引。好了,接下來就開始建立索引 首先建立一張表test index。create table test index title varchar 10 然後往其中插入100000條資料 from pymysql impor...
sql server 資料查詢優化
前幾周做專案遇到問題與大家分享 因讀取資料關聯n個表,我大部份都採用子查詢 in 當時資料量在10000記錄級內,而且在本地伺服器執行速度都比較快。當再一次匯入幾w條記錄後多表關聯 in 就宕機。然後瘋狂網上搜解決方案。查詢速度慢的原因很多,常見如下幾種 1 沒有索引或者沒有用到索引 2 i o吞吐...