分頁(yè)系統(tǒng) 為什么MySQL在數(shù)據(jù)庫(kù)較大的時(shí)候分頁(yè)查詢很慢,如何優(yōu)化?
為什么MySQL在數(shù)據(jù)庫(kù)較大的時(shí)候分頁(yè)查詢很慢,如何優(yōu)化?正如房東所說(shuō),分頁(yè)查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常常見,也是問題最多的查詢場(chǎng)景。例如,對(duì)于下面的簡(jiǎn)單語(yǔ)句,通常的思考方式是在name、age、reg
為什么MySQL在數(shù)據(jù)庫(kù)較大的時(shí)候分頁(yè)查詢很慢,如何優(yōu)化?
正如房東所說(shuō),分頁(yè)查詢?cè)谖覀兊膶?shí)際應(yīng)用中非常常見,也是問題最多的查詢場(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ì)覺得很慢。
通常,當(dāng)我們進(jìn)行分頁(yè)查詢時(shí),我們可以在上一頁(yè)中獲得一個(gè)數(shù)據(jù)標(biāo)志,以縮小查詢范圍,例如時(shí)間。我們可以將上一頁(yè)的最長(zhǎng)時(shí)間作為查詢條件的一部分。SQL可以優(yōu)化如下:
在某個(gè)簡(jiǎn)單分頁(yè)系統(tǒng)中,有2^24字節(jié)的物理內(nèi)存,256頁(yè)的邏輯地址空間?
1,系統(tǒng)的內(nèi)存空間是2^20=1MB
2,每個(gè)塊的大小是(與頁(yè)面大小相同)1KB
3,邏輯地址位數(shù)是(這個(gè)問題可以模擬成二進(jìn)制
50420h轉(zhuǎn)換成十進(jìn)制1056d,1056/1024=1(頁(yè)碼)1056 24=32(偏移量)第頁(yè)中的地址)。由于邏輯號(hào)1對(duì)應(yīng)物理塊號(hào)7,物理地址為1024*7 32=7200d
a在請(qǐng)求尋呼系統(tǒng)中,頁(yè)表項(xiàng)中包含的數(shù)據(jù)項(xiàng)包括頁(yè)號(hào)、物理塊號(hào)、狀態(tài)位P、訪問字段a、修改位m和
---外部存儲(chǔ)器地址;
B.狀態(tài)位P表示程序訪問時(shí)頁(yè)是否被調(diào)用到內(nèi)存中以供參考;
C訪問字段a用于記錄一段時(shí)間內(nèi)頁(yè)被訪問的次數(shù),或最近未被訪問的時(shí)間。提供給替換算法
---供選擇要調(diào)出的頁(yè)時(shí)參考;
D.修改位m表示該頁(yè)傳入內(nèi)存后是否被修改;
e.外部?jī)?nèi)存地址表示該頁(yè)在外部?jī)?nèi)存中的地址,通常是物理塊號(hào),用于在頁(yè)面中傳輸時(shí)