2012-10-23 59 views
1

在我的項目中,我有一個運行相同查詢但具有不同限制值的循環。在前10個循環中,查詢以可接受的速度執行,但後來減慢。表到我正在做的查詢具有150K寄存器,column1是整數,我的查詢是:如何使用ORDER BY和LIMIT更快地進行查詢?

SELECT * FROM my_table ORDER BY column1 ASC LIMIT 0,1000 
... 
SELECT * FROM my_table ORDER BY column1 ASC LIMIT 9000,10000 

我的理解它按每次都150K寄存器。但我如何才能在指定的範圍之間進行排序? 如何使此查詢工作更快?

回答

2

這可能是一個愚蠢的問題,但列1索引?

想想看第二個問題,如果數據庫需要整個數據集進行排序,以確定正確的1000元返回:)

假設你有10個號碼中任意順序它將使SENCE

4, 7, 1, 3, 9, 8, 5, 2, 6, 0 

並且您想要選擇5個數字,升序。如果你只取前5,並進行排序,你會得到

1,3,4,7,9 

,如果你第一次排序的整個列表,然後花了5你就必須

0,1,2,3,4 

編輯:既然是PK,我不知道,如果限制是足夠聰明的決定,如果你的主鍵是連續的,否則肯定會需要閱讀所有第一。 EXPLAIN會告訴你它是否是。

編輯基於COMMENT

如果是連續的,也許像這樣將有助於

SELECT * FROM ... WHERE column1 >= 9000 ORDER BY column1 ASC LIMIT 1000 

的地方將確保它忽略了9000下用COLUMN1值的所有行,所以你在較小的數據集上工作。

+0

這是一個PK。它已經索引 – andriy

+0

你的例子是正確的。我總是需要在應用限制之前對錶格進行排序。 – andriy

+0

仍然應該是辦法,雖然優化,即pentium10發佈的鏈接似乎讓你有選擇:)一個很好的概述 – JustDanyul

0

嘗試:

Select * from my_table where primary_key in 
(SELECT primary_key FROM my_table LIMIT 9000,10000) 
ORDER BY column1 ASC; 
相關問題