立即學習:https://edu.csdn.net/course/play/25283/297142?utm_source=blogtoedu
SQL優化:
原因:性能低、執行時間太長、 等待時間太長、SQL語句欠佳(連接查詢)、索引失效、服務器參數設置不合理(緩衝、線程數)
a.SQL:
編寫過程:
select ..from .. join ..on .. where .. group by .. having ..order by ..limit...
解析過程:
from .. on .. join .. where ..group by .. having .. select ..order by limit ..
b.SQL優化,主要就是優化索引
索引:相當於書的目錄
索引:index 是幫助MYSQL 高效獲取數據的數據結構,索引是數據結構(樹:B樹(mysql默認 )、Hash樹...)
B樹:
小的放左邊
大的放右邊
索引弊端:
1.索引本身很大,可以存放在內存、硬盤(通常爲硬盤)
2.索引不是所有情況均適用:a.少量數據 b.頻繁更新的字段 c.很少使用的字段
3.索引會降低增刪改的效率(增刪改 查)
優勢:1.提高查詢效率(降低了IO使用率)
2.降低CPU使用率()
3層B樹可以存放上百萬條數據
Btree:有很多類型,一般都是指B+,數據全部存放在葉節點中
B+樹種查詢任意的數據次數:n次(B+樹的高度)
4.索引
分類:
單 值索引:單列 ,age ; 一個表可以多個單值索引 ,name。
唯一索引:不能重複 。id
複合索引:多個列構成的索引(相當於 二級目錄; z: zhao )(name ,age)(a,b,c,d..多列也可以)
desc tb(表名);
創建索引:
方式一:
create 索引類型 索引名 on 表(字段)
單值:
create index dept_index on tb(dept);
唯一:
create unique index name_index on tb(name);
複合索引:
create index dept_name_index on tb(dept,name);
方式二:alter table 表名 索引類型 索引名 (字段)
單值:
alter table tb add index dept_index(dept)
唯一:
alter table add unique index name_index(name)
複合:
alter table add index dept_name_index(dept,name)
注意:如果一個字段是primary key ,則該字段默認就是 主鍵索引
刪除索引:
drop index 索引名 on 表名
查詢索引:
show index from 表名
5.SQl性能問題
a.分析SQL的執行計劃 :explain,可以模擬SQL優化器執行SQL語句,從而讓開發人員知道自己編寫的狀況;
b.MySQL查詢優化其會干擾我們的優化
查詢執行計劃:explain + SQL 語句
explain select * from tb;
id: 編號
select_type:查詢類型
table:表
type:類型
possible keys:預測用到的索引
key:實際使用的索引
key_len:實際使用索引的長度
ref:表之間的引用
rows:通過索引查詢到的數據量
Extra:額外的信息