java面經查缺補漏之二十九天(數據庫索引還沒啃完,繼續學習,然後再學習一些查詢優化策略)

上一篇: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.查詢優化之查詢的過程?

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章