簡體   English   中英

有效地展示數據庫軍事記錄

[英]show efficiently database milion record

我有一個擁有1000萬條記錄的數據庫。 該表的結構如下:

表名:記錄

  • Filed1:名稱(varchar)(主鍵)
  • Field2:記錄(int / bigint)(索引)

例:

Name | Record
Darrin | 256
Aaron | 3
Daryl | 12
...

我想創建一個html頁面,按照以下記錄顯示排名順序:

- http://stackexchange.com/leagues/1/week/stackoverflow/2016-10-30?sort=reputationchange&page=1

,但我有兩個問題:

  • 記錄太多 (ORDER BY需要20秒到沒有LIMIT的訂單表)

  • 如果我一次向你展示一點 (例如第一頁0-100,第二頁100-200 ......), 每個頁面都應該調用一個查詢來對數據庫進行排序,如:
    第一頁:“SELECT Name,Record FROM record ORDER BY Record DESC LIMIT 0,100”第二頁:“SELECT Name,Record FROM record ORDER BY Record DESC LIMIT 100,100”

這是非常低效的,並且上次查詢的時間會增加很多:

-first page:“SELECT Name,Record FROM record ORDER BY Record DESC LIMIT 0,100” - >需要0.003秒

-last page:“SELECT Name,Record FROM record ORDER BY Record DESC LIMIT 10.000.000,100” - >需要10秒

我插入記錄時最好保持數據庫的順序?

我該怎么辦?

上面提到的StackOverflow頁面如何快速加載?

謝謝!。

-first page:“SELECT Name,Record FROM record ORDER BY Record DESC LIMIT 0,100” - >需要0.003秒

-last page:“SELECT Name,Record FROM record ORDER BY Record DESC LIMIT 10.000.000,100” - >需要10秒

這是因為MySql接觸了第二次請求的10.000.100條記錄。

您需要通過復雜索引(Record,Name)替換索引(Record)並使用此SQL而不是您的SQL

SELECT Name,Record FROM record WHERE (Record, Name) < (3, 'Aaron') ORDER BY Record DESC, Name DESC LIMIT 100

對於第一頁和

SELECT Name,Record FROM record WHERE (Record, Name) < (3, 'Aaron') ORDER BY Record DESC, Name DESC LIMIT 100

對於下一頁,其中(3, 'Aaron') - 上一頁最后一行的字段(記錄,名稱)的值。

另一個解決方案 - 使用子序列:

SELECT r.Name, r.Record FROM record r JOIN (
  SELECT Record FROM record ORDER BY Record DESC LIMIT 10000000,100
) q ON q.Record = r.Record 

請參閱此文章 - MySQL ORDER BY / LIMIT性能:后期行查找

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM