mysql中,分表查詢和索引查詢哪個更快?
謝謝你邀請我!
決定查詢速度的因素有很多,比如內存碎片、數據量大等,都屬于I/O問題。表結構設計和查詢語句是技術熟練(經驗)問題。關于你的子表快還是你的索引快這個問題有一個問題:
創建數據表時,索引是必需的,主鍵是唯一的索引。
我覺得當我們需要關注查詢速度的時候,一定是單個表的數據量越來越大,或者是預測到數據量會越來越大,比如日志表和運行記錄,或者是查詢的時候有更多的相關表。
如果是像配置數據表這種數據有限的表,加不加主鍵以外的索引影響不大。
基于單個數據庫,
那么對于數據量大、增長速度快的表,就需要增加查詢速度的第一指標,分區或子表可以有效提高效率,需要讀寫分離。
但是,如何分桌是需要注意的。可以按字段(垂直)或某些字段的值特征(水平)來劃分表。總之,要盡量做到同表相同的數據特征。在生成SQL時,代碼可以決定要查找哪些表,從而避免查詢不相關的表。查詢的表越少,掃描的記錄越少,效率越高。
即時原創回答,一些個人經歷,僅供參考!
mysql一張大表,一張小表,如何join最快?
Rows表示相對于前一步驟的結果,此步驟的每一行需要掃描的行數。可以看出,這條sql需要掃描的行數是35773*8134,這是一個非常大的數字。原來表C和表H的記錄數分別是40000和10000,差不多是做兩個表的笛卡爾積的成本(select*fromc,H)。
于是我上網查了一下MySQL實現join的原理。原來MySQL采用了一種叫做嵌套循環連接的算法。嵌套循環Join其實就是把驅動表的結果集作為循環的基礎數據,然后把這個結果集中的數據作為過濾條件,逐個查詢下一個表中的數據,然后合并結果。如果連接中有第三個參與者,則將前兩個表的連接結果集作為循環的基礎數據,再次通過循環查詢條件在第三個表中查詢數據,以此類推。基本上,MySQL采用最容易理解的算法來實現join。所以驅動表的選擇很重要,驅動表的小數據可以顯著減少掃描的行數。