12 mysql簡單優化

2022-07-01 06:03:14 字數 2075 閱讀 8597

# 檢視所有運**況,加global為執行至今

show status;

# 檢視經歷多少查詢

show global status like '%com_select%';

# 檢視經歷多少插入

show global status like '%com_insert%';

# 查詢伺服器執行多長時間

show global status like '%update%';

# 查詢當前有多少連線

show status like '%connect%';

# 查詢當前有多少連線

show processlist;

# 檢視最大併發連線數

show variables like '%max_connections%';

# 檢視慢查詢是否開啟

show variables like '%log_slow_queries%';

# 開啟慢查詢方法:再配置檔案新增如下內容

long-slow-queries=slow.log //開啟慢查詢,記錄日誌位置,預設為/var/lib/mysql

long-slow-not-using-index=on //開啟表不使用索引也會計入日誌

long-query-time=15 //定義為慢查詢的時間

# mysqldumpslow -s c -t 10 //輸出記錄次數最多的10條sql語句

(1) 對於表設計,盡量使用範圍小型別的資料型別,且字段盡量設定為not null;能用數值型就不用字元型;

(2) 對於插入語句,提高插入資料速度,先關閉索引,再開啟索引;

(3) 對於查詢語句,應考慮在where及order by涉及的列上建立索引;

(4) 對於查詢語句,應盡量避免在where子句中做如下操作,否則將引擎放棄使用索引而進行全表掃瞄;

# 使用!=或<>操作符

# or操作符

# null值判斷

# %模糊查詢

# 對欄位進行表示式操作

# 對欄位進行函式操作

(5) 對於查詢語句,慎用in和not in,否則會導致全表掃瞄;對於連續的數值,能用between就不用in;

(6) 如果在 where 子句中使用引數,也會導致全表掃瞄,因為sql只有在執行時才會解析區域性變數;

例如下面查詢語句:

select id from t where num=@num;

可強制使用索引,改為:

select id from t with(index(索引名)) where num=@num;

(7) 在使用索引字段作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第乙個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓字段順序與索引順序相一致;

(8) 在連線查詢中,主表比子表資料量大時,使用in,反之用exists,相差不大無區別;使用not exits任何時候都比not in效率高。in是把外表和內錶作hash連線,而exists是對外表作loop迴圈;

(9) 並不是所有索引對查詢都有效,當索引列有大量資料重複時,sql查詢可能不會去利用索引;

(10) 索引並不是越多越好,索引固然可以提高相應的select的效率,但同時也降低了insert及update的效率,乙個表的索引數最好不要超過6個;

(11) 任何地方都不要使用 select * from t;

(12) 避免頻繁建立和刪除臨時表,以減少系統表資源的消耗;

(13) 在儲存過程中,如果使用了臨時表,在儲存過程的最後務必將所有的臨時表顯式刪除,先truncate table,然後drop table,這樣可以避免系統表的較長時間鎖定;

(14) 在儲存過程中,盡量不使用游標,因為游標的效率較差。

(15) 在所有的儲存過程和觸發器的開始處設定set nocount on,在結束時設定set nocount off,無需在執行每個語句後向客戶端傳送 done_in_proc訊息。

12 mysql匯入資料

1 mysql命令匯入 語法 mysql u root p passwd runoob.sql 2 source命令匯入 source aa.sql 3 使用load data匯入資料 mysql 中提供了load data infile語句來插入資料。以下例項中將從當前目錄中讀取檔案 dump.t...

12 mysql中的游標

查詢語句可能查詢出多條記錄,在儲存過程和函式中使用游標來逐條讀取查詢結果集中的記錄。有些書上將游標稱為游標。游標的使用包括宣告游標 開啟游標 使用游標和關閉游標。游標必須宣告在處理程式之前,並且宣告在變數和條件之後。游標可以模擬為陣列內部中的迴圈指標。declare cursor name curs...

12月12 mysql連線報錯

一 mysql連線報錯 mysql5.5 springboot2.0 the server time zone value is unrecognized or represents 修改my.ini 搜尋 mysqld 節點在節點下面加上下面這句話 default time zone 08 00 ...