mysql
中的索引官方定義是幫助
mysql
高效的獲取資料的資料結構。樹結構型別,類似於圖書的數目索引,可以提高資料檢索的效率,降低資料庫的
io成本
聚集索引的意思可以理解為順序排列,比如乙個主鍵自增的錶即為聚集索引。乙個表只能包含乙個聚集索引。唯一索引:如果該欄位資訊保證不會重複例如身份證號用作索引時,可設定為
unique
建立索引:create index mycolumn_index on mytable (myclumn)
資料庫查詢優化方案:
一、對表字段的優化:1、
最好不要給資料庫留null,盡可能的使用 notnull填充資料庫.
2、盡量使用數字型字段,若只含數值資訊的字段盡量不要設計為字元型,這會降低查詢和連線的效能,並會增加儲存開銷。這是因為引擎在處理查詢和連線時會逐個比較字串中每乙個字元,而對於數字型而言只需要比較一次就夠了。3、
盡可能的使用 varchar/nvarchar代替 char/nchar
,因為首先變長字段儲存空間小,可以節省儲存空間,其次對於查詢來說,在乙個相對較小的字段內搜尋效率顯然要高些。
二、對sql語句的優化
1. 對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在 where及 order by 涉及的列上建立索引。
2. 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄
3. 應盡量避免在 where 子句中使用 != 或 <> 操作符,否則將引擎放棄使用索引而進行全表掃瞄。
4. 應盡量避免在 where 子句中使用 or 來連線條件,如果乙個欄位有索引,乙個字段沒有索引,將導致引擎放棄使用索引而進行全表掃瞄
5. 應盡量
避免在 where子句中對字段進行表示式操作、函式操作,
這將導致引擎放棄使用索引而進行全表掃瞄。
6. in
和 not in 也要慎用,否則會導致全表掃瞄
對於連續的數值,能用 between就不要用 in 了
很多時候可以使用
exist
和not exist代替in和not in。
7. like
操作符 例如like 『%5400%』 這種查詢不會引用索引,而like 『x5400%』則會引用範圍索引。
8. 對於多張大資料量(這裡幾百條就算大了)的表join,要先分頁再join,否則邏輯讀會很高,效能很差。
9. select count(*) from table
;這樣不帶任何條件的count會引起全表掃瞄,並且沒有任何業務意義,是一定要杜絕的。
10.任何地方都不要使用 select * from t ,用具體的字段列表代替「*」,不要返回用不到的任何字段
。11.
不要以字元格式宣告數字,要以數字格式宣告字元值。(日期同樣)否則會使索引無效,產生全表掃瞄。
12.盡量避免使用游標,因為游標的效率較差(
游標(cursor
)是系統為使用者開設的乙個資料緩衝區,存放
sql語句的執行結果
)13.
盡量避免向客戶端返回大資料量,若資料量過大,應該考慮相應需求是否合理。
三、 對資料庫進行修改的優化處理
1. 索引並不是越多越好,索引固然可以提高相應的 select 的效率,但同時也降低了 insert 及 update 的效率,因為 insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。乙個表的索引數最好不要超過6個
2. (
臨時表 #本地臨時表 ##全域性臨時表) 避免頻繁建立和刪除臨時表,以減少系統表資源的消耗。在新建臨時表時,如果一次性插入資料量很大,那麼可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果資料量不大,為了緩和系統表的資源,應先createtable,然後insert。
3. 盡量避免大事務操作,提高系統併發能力。
4. update
語句,如果只更改1、2個字段,不要update全部字段,否則頻繁呼叫會引起明顯的效能消耗,同時帶來大量日誌 orm物件關係對映(效能差)
Mysql的優化方案
1 避免放棄使用索引而進行全表掃瞄的情況 在where後的條件中盡量不使用 2 正確的使用索引 3 正確選擇exist 與 in 和 not exist 與 not in 在任何情況下 not exist 的效率都高於 not in 4 使用join來替代子查詢 子查詢 通過select語句來建立乙...
mysql 優化整理
1.count 1 和count primary key 優於 count 很多人為了統計記錄條數,就使用 count 1 和 count primary key 而不是 count 他們認為這樣效能更好,其實這是乙個誤區。對於有些場景,這樣做可能性能會更差,應為資料庫對 count 計數操作做了一...
Mysql優化方案
client 客戶端編碼方式,最好和服務端儲存一致 loose default character set utf8 mysqld 埠port 3306 mysql根目錄 basedir d ide mysql 5.6.25 winx64 資料檔案存放目錄 datadir d ide mysql 5...