java數(shù)據(jù)量大的分頁(yè)查詢 為什么MySQL在數(shù)據(jù)庫(kù)較大的時(shí)候分頁(yè)查詢很慢,如何優(yōu)化?
為什么MySQL在數(shù)據(jù)庫(kù)較大的時(shí)候分頁(yè)查詢很慢,如何優(yōu)化?正如房東所說(shuō),分頁(yè)查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常常見(jiàn),也是問(wèn)題最多的查詢場(chǎng)景。例如,對(duì)于下面的簡(jiǎn)單語(yǔ)句,通常的思考方式是在name、age、reg
為什么MySQL在數(shù)據(jù)庫(kù)較大的時(shí)候分頁(yè)查詢很慢,如何優(yōu)化?
正如房東所說(shuō),分頁(yè)查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常常見(jiàn),也是問(wèn)題最多的查詢場(chǎng)景。例如,對(duì)于下面的簡(jiǎn)單語(yǔ)句,通常的思考方式是在name、age、register中u在time字段上創(chuàng)建一個(gè)復(fù)合索引。這樣,條件排序可以有效地利用索引,性能得到快速提高。
如上例所示,當(dāng)limit子句變?yōu)椤發(fā)imit 100000,50”時(shí),我們會(huì)發(fā)現(xiàn),如果只選擇了50條語(yǔ)句,為什么會(huì)變慢?
,所以我們會(huì)覺(jué)得很慢。
如何使用使用分頁(yè)查詢來(lái)適應(yīng)挖掘海量數(shù)據(jù)呢?
分頁(yè)查詢。一般來(lái)說(shuō),DBA的思想是在某個(gè)(如ID、create等)時(shí)間字段中進(jìn)行查詢。這樣,條件排序可以有效地利用索引,性能得到快速提高。因?yàn)槿绻鹟imit子句變成“l(fā)imit 1000000,10”,你會(huì)抱怨:為什么我只錄了10張唱片,卻還慢?你知道,數(shù)據(jù)庫(kù)不知道1000000條記錄從哪里開(kāi)始。即使有指標(biāo),也需要從頭開(kāi)始計(jì)算。當(dāng)出現(xiàn)這種性能問(wèn)題時(shí),大多數(shù)時(shí)候程序員是懶惰的。在前端數(shù)據(jù)瀏覽翻頁(yè)或大數(shù)據(jù)批量導(dǎo)出的場(chǎng)景中,可以將前一頁(yè)的最大值作為一個(gè)參數(shù)作為查詢條件。SQL重新設(shè)計(jì)如下:通過(guò)create從create time>“2017-07-04 09:00:00”O(jiān)RDER表格中選擇*這樣,查詢時(shí)間基本固定,不會(huì)隨著數(shù)據(jù)量的增長(zhǎng)而變化。