MySQL基礎優化二

2021-10-05 17:55:36 字數 2605 閱讀 6297

最佳左字首原則為,保持索引的定義和使用順序的一致性

將含in的範圍查詢,放到where條件語句的最後。

索引需要逐步優化

小表驅動大表

復合索引,不要跨列或無序使用(最佳左字首)

復合索引,盡量使用全索引匹配。就是盡量避免復合索引有三列,而只用到兩列。

復合索引不能使用範圍查詢(!= <>)或is null (is not null),否則自身及右側索引全部失效。

不要對索引進行操作(計算,函式,型別轉換),否則索引失效。

select .. where a.x*3 = ...

-- a.x列存在索引,索引失效

注意:sql優化,是一種概率層次的優化,原因是服務層中有sql優化器,可能會影響我們的優化,出現與我們預期不符的情況。

盡量不要使用or,會使左右兩邊索引全部失效。

exist 和 in :如果主查詢的資料極大,則使用in,如果子查詢的資料大,則使用exist。

order by :選擇使用單路還是雙路;調整buffer容量的大小;避免使用select *…;復合索引不要跨列使用。

mysql提供的一種日誌記錄,用於記錄mysql中響應超過閾值的sql語句(預設是10秒),慢查詢日誌預設是關閉的,建議:開發時開啟,最終部署時關閉。

show variables like

'%slow_query_log%'

;

-- 檢視profiles是否開啟

show variables like

'%profiling%'

;

檢視sql語句執行的query_id以及持續時間

show profiles;
​ 注意: show profiles可以看到profiling開啟之後的sql語句,會顯示id,持續時間,以及sql語句,但是我們無法精準的看到各個硬體消費的時間。

檢視sql語句執行的具體硬體消費情況

-- 檢視全部資訊

show profile all

for query query_id;

-- 檢視部分資訊

show profile cpu, block io for query query_id;

全域性檢視日誌會記錄開啟之後的全部sql語句,因此比較耗費效能。所以我們僅在調優、開發時使用。而且全域性查詢日誌資訊較少,所以使用較少。

使用方法

-- 檢視是否開啟

show variables like

'%general_log%'

;-- 開啟全域性查詢日誌

setglobal general_log =1;

setglobal log_output=

'table'

;-- 表明我們將sql存在表裡。mysql.general_log表。

setglobal log_output=

'file'

;set

global general_log_file=

'目錄/general.log'

;-- 表明將sql儲存在檔案裡

setglobal general_log =1;

-- 如果無效就需要再開啟一下

myisam只支援表鎖,innodb支援表鎖和行鎖

-- 加鎖

lock

table 表1

read

/write

, 表1

read

/write..

.;-- 釋放鎖

unlock

tables

;-- 檢視表加鎖情況

show

open

tables

;

讀鎖(共享鎖)會話1 對 a 表加 讀 鎖

會話1其他會話

a表可以讀,不可以寫

可以讀取,想要更新必須等待會話1釋放表鎖

其他表不可以讀寫

可以讀寫

寫鎖(互斥鎖)

會話1 對 a 表加 寫 鎖

關閉自動提交

-- 以下三種方式都可以

set autocommit=0;

start

transaction

;begin

;

集群和分布式:用板磚來比喻,一開始乙個人負責搬磚和運磚,後來工頭嫌他慢,又找了幾個人幫他一起搬磚運磚,這叫集群(多個伺服器支援乙個專案)。後來工頭還不滿足,就讓一群人專門負責搬磚,另一群人專門負責運磚,這叫分布式(乙個專案劃分為幾個部分)。

主從複製大概過程

最優化基礎(二)

在演算法的收斂性分析中,需要用到向量和矩陣範數的概念及其有關理論。範數 norm 是具有 長度 概念的函式。設r n 表示實n維向量空間,rn n 表示實n階矩陣全體所組成的線性空間.在這兩個空間中,我們分別定義向量和矩陣的範數.向量x rn的範數 x 是乙個非負數,它必須滿足以下條件 1.非負性 ...

MySQL優化(二) 優化SQL語句

2.優化子查詢,派生表和檢視引用 3.優化information schema查詢 4.優化資料變更宣告 5.優化資料庫許可權 6.其他優化技巧 資料庫應用程式的核心邏輯是通過sql語句執行的,無論是直接通過直譯器發出還是通過api在後台提交。查詢以select 語句的形式執行資料庫中的所有查詢操作...

mysql 效能優化(二)

今天突然看到一年前寫的 mysql 優化 一 感覺有些誤人子弟。今天再補充一些東西。關於引擎選擇,從理論上 和 實際上 可能會有差距,所以,對待mysql 要有實驗精神。一般來說,myisam 適合 1.做很多count 的計算。2.插入不平凡,查詢非常頻繁。3.沒有事務 innordb 非常適合 ...