上一篇:https://blog.csdn.net/qq_41901915/article/details/104972555
1.高性能的索引策略之聚簇索引(主鍵索引)?
聚簇索引不僅是一種索引類型,也是一種數據存儲方式。
葉子頁包含了行的全部數據,但節點頁只包含了索引列。
簡單的來說就是通過主鍵來聚集數據,innodb就是這麼做的,如果你沒有設置,它會選擇一種隱示主鍵的方式。
優點:
數據訪問快,可以把相關數據放到一起。比如:通過一個主鍵,我就可以獲得這個人的所有郵件。
2.高性能的索引策略之覆蓋索引?
參考:https://www.cnblogs.com/happyflyingpig/p/7662881.html
參考:https://blog.csdn.net/qq_15037231/article/details/87891683
簡單的來說就是,只從索引中就可以獲得查詢的數據,不必從數據表中來讀取。創建的索引覆蓋了查詢語句中的字段和條件,查詢速度快,還可以進行排序。
explain的解釋中的extra會出現using index。
3.什麼是最左前綴原則?
最左前綴:顧名思義,就是最左優先,比如我們創建了abc聯合索引,相當於創建了a,ab,abc索引
注:在創建多列索引時,要根據業務需求,where子句中使用最頻繁的一列放在最左邊。
4. 高性能的索引策略之使用索引掃描來做排序?
explain出來的type爲index,那麼就是索引排序。
有三種情況可以用索引掃描來做排序:
(1)索引的列順序和order by的列順序完全一樣,切排序方向一樣纔可以。
(2)滿足索引的最左前綴原則纔可以。
(3)前導列爲常量的時候,後面也符合一定的順序纔可以。
例子:
5.高性能的索引策略之避免重複索引和冗餘索引?
重複索引:
冗餘索引:
如果創建了聯合索引(A,B),就相當於創建了(A),(A,B)如果再創建一個(A),那麼它就是冗餘索引。
6.高性能的索引策略之避免未使用的索引?
沒有使用的,當然是多餘的,那麼就可以刪掉了。
7.查詢優化之是否向服務器發送了不需要的數據?
謹慎使用select *,因爲很可能查詢了沒有用的數據。
重複查詢相同數據,如果一個用戶進行評論,會查詢這個用戶的id,如果多次評論,查詢的id就都是一樣的了,所以就可以用緩存了。
由於客戶端和服務器之間是半雙工通信,只能有一方可以發送,如果這個人想着查詢所有,然後在客戶端這邊進行篩選,這將會是極大的浪費,可以在客戶端這邊直接加上limit,限制發送的數據量。
8. 查詢優化之切分查詢?
這樣可以將服務器的壓力分散到一個很長的時間段上。
9. 查詢優化之分解關聯查詢?
10.查詢優化之查詢的過程?