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