1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。
2.應盡量避免在where子句中對字段進行null判斷,否則會導致引擎放棄使用索引而進行全表掃瞄。
3.應盡量避免在where子句中使用!=或<>操作符,否則會導致引擎放棄使用索引而進行全表掃瞄。
4.應盡量避免在 where 子句中使用 or 來連線條件,否則將導致引擎放棄使用索引而進行全表掃瞄。
eg:select id from t where num = 1 or num = 2
可寫成:select id from t where num = 1 union all select id from t where num = 2
5.in和not in要慎用,否則會導致全表掃瞄。
eg:select id from t where num in(1,2,3)
由於1,2,3連續,最好用between,可寫成:
select id from t where num between 1 and 3
6.盡量避免使用模糊查詢。(where like 『%abc%』)
7.避免在where
子句中使用引數。(因為
sql只有在執行時才會解析區域性變數,但優化程式不能將訪問計畫的選擇推遲到執行時,必須在編譯時進行選擇。若在編譯時建立訪問計畫,變數的值未知,因此無法作為索引選擇的輸入項)
eg:select id from t where num = @num
可改寫為:
select id from t with(index(索引名
)) where num = @num
(強制使用索引查詢)
8.避免在where
子句中對字段進行表示式操作。(eg:
where num/2 = 1)
9.避免在where
子句中對字段進行函式操作。(eg:
where substring(name,1,3))
10.避免在where
子句中的「=」左邊進行函式,運算。
11.避免寫無意義的查詢。(where 1 = 0)
12.盡量用exists
代替in。
eg:select num from t where num in(select num from t1)
改寫為:
select num from t where exists(select 1 from t1 where num = t.num)
注:巢狀子查詢效率相當低,可使用exists
或join語句
13.盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型。(降低查詢和連線的效能,增加儲存開銷,引擎在處理查詢和連線時會比較字串中的每乙個字元,數字型欄位只比較一次)
14.盡量使用varchar
代替char
,因為變長字段儲存空間小,可節省儲存空間,查詢效率更高。
15.任何地方都不要使用select * from t
類似的語句,用具體的字段來代替*。
16.盡量使用表變數來代替臨時表。
17.避免大事務操作,提高系統併發能力。
18.避免向客戶端返回大資料量,若資料量過大,應考慮相應需求是否合理。
19.當知道查詢的結果集只有一條記錄,應使用limit 1。
20.為搜尋字段建立索引。
21.一定要為每張資料庫表設定乙個id
字段。(主鍵自增id,
int型別,
unsigned)
22.使用enum
代替varchar
。(若字段的取值是有限固定的)
23.使用固定長度的表會更快。
說明:若表中的字段是固定長度的,表就會是「static」的,使用固定的表會提高mysql
搜尋的速度,因為固定的長度是很容易計算下乙個資料的偏移量的。若欄位不是固定的,每一次找下一條記錄時都需要找錶的主鍵。固定長度的表的缺點就是會浪費空間,空間固定,沒有可變字段靈活。
24.要學會拆分長的delete
或insert語句
說明:當執行delete或insert
建議:融會貫通,多實踐多思考!
Mysql效能調優
mysql 效能調優有很多方面,主要是這幾個方面 1 正規化 是指表的列具有原子性,不可再拆分,只要資料庫是線性的,都自動滿足1nf。2 正規化 表中的紀錄是唯一的。3 正規化 表中資料不應該有冗餘,如果通過某個欄位就能得到跟該字段相關的資訊,就沒必要將這些資訊,再存放到該表中。在3nf中,可能會對...
MySQL效能調優
1 經常用來讀的表使用myisam儲存引擎 2 其餘的表都用innodb儲存引擎 1 在select where order by常涉及到的字段上建立索引 2 where子句中不使用 否則將放棄使用索引進行全表掃瞄 3 盡量避免用null值判斷,否則會全表掃瞄 示例 select id from t...
mysql效能調優
1.伺服器效能引數查詢 show global session status like 引數 一些常用的效能引數如下 connections 連線mysql伺服器的次數。uptime mysql伺服器的上線時間。slow queries 慢查詢的次數。innodb rows read select查...