天天看點

MySql相關面試題個人部落格1. MySQL底層采用什麼資料結構2. 為什麼MySQL的Innodb存儲引擎必須要有主鍵3. 一條SQL語句查詢慢, 如何優化?4. explain工具使用5. Sql語句查詢如何避免回表查詢6. 索引為何需要遵循最佳左側法則?7. like不走索引如何優化?8. 千萬級資料, 如何查詢優化?9. 如何分表分庫? 分表分庫後如何查詢?10. 分表分庫後如何分頁查詢?11. 分片的政策有哪些?

個人部落格

歡迎通路個人部落格: https://www.crystalblog.xyz/

備用位址: https://wang-qz.gitee.io/crystal-blog/

1. MySQL底層采用什麼資料結構

2. 為什麼MySQL的Innodb存儲引擎必須要有主鍵

3. 一條SQL語句查詢慢, 如何優化?

4. explain工具使用

5. Sql語句查詢如何避免回表查詢

6. 索引為何需要遵循最佳左側法則?

7. like不走索引如何優化?

8. 千萬級資料, 如何查詢優化?

9. 如何分表分庫? 分表分庫後如何查詢?

将一張大表的資料拆分成n張多子表資料存放. 那麼一張表最多存放多少條資料呢?

阿裡巴巴開發手冊規範:

單表行數超過500萬行或者單表容量超過2GB, 才推薦進行分表分庫.

如果預計三年後的資料量根本達不到這個級别, 請不要在建立表時就分表分庫.

分表分庫存在缺陷, 資料如何分攤存放?

方案1: 全局且唯一, 連續的ID, ID%分表總數, 這種方式存在後期難以擴容的問題.

優點: 保證資料分攤均勻存放. 分片的字段必須保證連續性.

缺點: 後期無法擴容

方案2: 業務ID按照日期字首生成, 按日期分表.(年,月,日)

按年分表, 會存在資料分布不均勻的問題. 可能2020年表隻有100萬, 2021年表有1000萬資料.

可以按月分表會合理一些.

方案3: 分段形式(ID分段存儲.), 支援無限擴容, 查詢效率非常高. 下面以User表為例, 以500萬資料進行分段:

MySql相關面試題個人部落格1. MySQL底層采用什麼資料結構2. 為什麼MySQL的Innodb存儲引擎必須要有主鍵3. 一條SQL語句查詢慢, 如何優化?4. explain工具使用5. Sql語句查詢如何避免回表查詢6. 索引為何需要遵循最佳左側法則?7. like不走索引如何優化?8. 千萬級資料, 如何查詢優化?9. 如何分表分庫? 分表分庫後如何查詢?10. 分表分庫後如何分頁查詢?11. 分片的政策有哪些?

查詢語句如果沒有帶上

分片字段

, 就會去查詢所有結構表的資料, 查詢語句需要帶上

分片字段

. 最好查詢條件帶上索引字段.

10. 分表分庫後如何分頁查詢?

每張表分頁查詢資料, 交給資料庫中間件(sharding-jdbc/mycat)整合後傳回Limit資料給用戶端.

sharding-jdbc

MySql相關面試題個人部落格1. MySQL底層采用什麼資料結構2. 為什麼MySQL的Innodb存儲引擎必須要有主鍵3. 一條SQL語句查詢慢, 如何優化?4. explain工具使用5. Sql語句查詢如何避免回表查詢6. 索引為何需要遵循最佳左側法則?7. like不走索引如何優化?8. 千萬級資料, 如何查詢優化?9. 如何分表分庫? 分表分庫後如何查詢?10. 分表分庫後如何分頁查詢?11. 分片的政策有哪些?

mycat

MySql相關面試題個人部落格1. MySQL底層采用什麼資料結構2. 為什麼MySQL的Innodb存儲引擎必須要有主鍵3. 一條SQL語句查詢慢, 如何優化?4. explain工具使用5. Sql語句查詢如何避免回表查詢6. 索引為何需要遵循最佳左側法則?7. like不走索引如何優化?8. 千萬級資料, 如何查詢優化?9. 如何分表分庫? 分表分庫後如何查詢?10. 分表分庫後如何分頁查詢?11. 分片的政策有哪些?

11. 分片的政策有哪些?