Mysql優化一
一、存盤引擎
1.查看所有引擎
SHOW ENGINES;

2.查看默認存盤引擎
show VARIABLES LIKE '%STORAGE_engine%';

3.MyISAM和InnoDB
| 對比項 | MyISAM | InnoDB |
|---|---|---|
| 主外鍵 | 不支持 | 支持 |
| 事務 | 不支持 | 支持 |
| 行表鎖 | 表鎖,即使操作一條記錄也會鎖住整個表,不適合高并發的操作 | 行鎖,操作時只鎖某一行,不對其他行有影響,適合高并發的操作 |
| 快取 | 只快取索引,不快取真實資料 | 不僅快取索引還要快取真實資料,對記憶體的要求較高,而且記憶體的大小對其性能有決定性的影響 |
| 表空間 | 小 | 大 |
| 關注點 | 性能 | 事務 |
| 默認安裝 | YES | YES |
二、SQL執行加載順序
From left_table
on join_condition
<join_type> join right_table
where where_condition
group by group_condition
having having_condition
select
distinct select_list
order by orderBy_condtion
limit limit_num
三、索引
1.定義
索引是幫助Mysql高效獲取資料的資料結構,——>本質:資料結構,
其目的在于提高查詢效率,可以類比于字典,可以簡單理解為排好序的快速查找資料結構,
資料本身之外,資料庫還維護著一個滿足特定查找演算法的資料結構,這些資料結構以某種方式指向資料,這樣就可以在這些資料結構的基礎上實作高級查找演算法,這種資料結構就是索引,
通常說的索引如果沒有特別指明,說的都是B樹(多路搜索樹,并不一定是二叉的)結構組織的索引,其中聚集索引、次要索引、覆寫索引、復合索引、前綴索引、唯一索引默認都是使用B+樹索引,統稱索引,當然,除了B+樹這種型別的索引之外,還有哈希索引等
索引會影響到查找和排序
一般來說索引也很大,不可能全部存盤在記憶體中,因此索引往往以索引檔案的方式存盤在磁盤上,
2.特點
優點:提高資料檢索的效率,降低了資料庫的IO成本,
? 通過索引對資料進行排序,降低資料排序的成本,降低了CPU的消耗,
缺點:實際上索引也是一張表,該表保存了主鍵與索引欄位,并指向物體表的記錄,所以索引也是占用空間的,
? 雖然其大大調高了查詢速度,同時卻會降低更新表的速度,因為更新表時不僅要保存資料,還要保存一下 索引檔案每次更新添加了索引列的欄位,都會調整因為更新所帶來的鍵值變化后的索引資訊,
? 索引只是提高效率的一個因素,如果你的資料庫擁有大量的表,就需要花時間研究建立最優秀的索引,或 優化查詢,
3.分類
-
單值索引
一個索引只包含單個列,一個表可以有多個單值索引,
-
唯一索引
索引列的值必須唯一,但允許有空值
-
復合索引
一個索引包含了多個列
4.基本語法
創建:UNIQUE是唯一索引, columnname只有一個是單值索引,有多個為復合索引
CREATE [UNIQUE] INDEX indexname on tablename(columnname1, columnname2...)
or
ALERT tablename add [UNIQUE] INDEX [indexname] on (columnname1, columnname2...)
洗掉:
DROP INDEX [indexname] on tablename
查看
SHOW INDEX FROM tablename
5.適合建立索引的情況
- 主鍵自動建立唯一索引
- 頻繁作為查詢條件的欄位應該創建索引
- 查詢中與其他表關聯的欄位,外鍵關系建立索引
- 查詢中排序的欄位,排序欄位若通過索引去訪問,將大大提高排序速度
- 單鍵/組合索引的選擇問題(高并發適合創建組合索引)
- 查詢中統計或分組的欄位
6.不適合創建索引的情況
-
頻繁更新的欄位
-
where條件里用不到的欄位
-
表記錄太少
-
資料重復且分布平均的表欄位,因此應該只為最經常查詢和最經常排序的資料建立索引
索引的選擇性=不同的數目/總數目
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/111000.html
標籤:MySQL
上一篇:mysql的varchar型別怎么轉換為bigint
下一篇:mysql全域變數和區域變數
