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