事務(wù)
臟讀 事務(wù)A讀取到了事務(wù)B 未提交的內(nèi)容
幻讀 事務(wù)A讀取到了事務(wù)B 提交的新增數(shù)據(jù)
幻讀和臟讀有點(diǎn)類似:
臟讀 是事務(wù)B里面修改了數(shù)據(jù)
幻讀 是事務(wù)B里面新增了數(shù)據(jù)
事務(wù)的隔離級(jí)別
存儲(chǔ)引擎
SQL執(zhí)行加載順序
MySQL執(zhí)行順序
FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>
MYSQL七中join方式
索引是什么
索引優(yōu)缺點(diǎn)
explain關(guān)鍵字
索引優(yōu)化
- 要遵循
最左匹配原則
帶頭大哥不能死弱卡,中間兄弟不能斷
- 不在索引列上做任何操作
(計(jì)算、函數(shù)删性、(自動(dòng)or手動(dòng)類型轉(zhuǎn)換))
叮姑,會(huì)導(dǎo)致索引失效褒傅,而轉(zhuǎn)向全表掃描
比如:字符串不加單引號(hào) 索引會(huì)失效
- 存儲(chǔ)引擎不能使用索引中 范圍條件 右邊 的列
- 避免在查詢語句中使用select *
- mysql在使用不等于
(!= or <>)
的時(shí)候無法使用索引屹培,會(huì)導(dǎo)致全表掃描 -
is null迂苛,is not null
也無法使用索引 - like 以通配符開頭
('%abc...')
禁悠,mysql索引會(huì)失效欧啤,變成全表掃描
如果非要使用以通配符開頭睛藻,則最好使用覆蓋索引,才能避免回表查詢
- 少用
or
關(guān)鍵字邢隧,用它連接時(shí)會(huì)導(dǎo)致索引失效
join語句的優(yōu)化
- 盡可能減少join語句中的NestedLoop的循環(huán)總次數(shù)店印;"永遠(yuǎn)用小結(jié)果集驅(qū)動(dòng)大結(jié)果集"
- 優(yōu)先優(yōu)化NestedLoop的內(nèi)層循環(huán)(也就是子查詢中優(yōu)先優(yōu)化嵌套最深的語句)
- 多表關(guān)聯(lián)查詢時(shí),索引建在子表(因?yàn)橹鞅硪欢〞?huì)進(jìn)行全表掃描)
查詢優(yōu)化
行鎖優(yōu)化建議
- 盡可能讓所有數(shù)據(jù)檢索都通過索引來完成倒慧,避免無索引 行鎖升級(jí)為表鎖
- 合理設(shè)計(jì)索引按摘,減小鎖的范圍(比如縮小間隙鎖的范圍)
- 盡可能較少檢索條件包券,避免間隙鎖
- 盡量控制事務(wù)大小,減少鎖定資源量和時(shí)間長(zhǎng)度
- 盡可能降低 事務(wù)的隔離級(jí)別