2012-09-20 85 views
1

請問任何人都可以幫我寬度這個查詢? 我找不到解決方案。mysql優化查詢尋呼

SELECT *,p.cat_id, cat_name FROM ( SELECT cat_id FROM categories ORDER BY cat_id LIMIT 700000, 10 ) o JOIN categories p ON p.cat_id = o.cat_id ORDER BY p.cat_id

這是與80萬點的記錄表非常快,但我需要的是將數據與ORDER BY子句和地方claue,排序太 - 分頁。如果我使用ORDER BY這對非常緩慢或結果不正確排序>

SELECT *, p.cat_id, cat_name FROM(
    SELECT cat_id 
    FROM categories 
    LIMIT 700000, 10 
    ) o JOIN categories p 
ON  p.cat_id = o.cat_id 
ORDER BY p.cat_name 

page 1 
LIMIT 700000,5: 
id  name 
12525525 car 
15155151 carpet 
1521512i zone 

page 2 
LIMIT 700005,5 
id  name 
12525525 carefull 
15155151 excellent 
52151222 drive 

我需要的結果是:

page 1 car 
carpet 
drive 
excellent ... etc. 


f.e. , this is very slow ofcourse > 
SELECT *, p.cat_id, cat_name 
FROM (
     SELECT cat_id 
     FROM categories 
     **ORDER BY cat_name** 
     LIMIT 700000, 10 
     ) o 
JOIN categories p 
ON  p.cat_id = o.cat_id 
ORDER BY p.cat_name 

主鍵CAT_ID,自動增量 我已經在字段的索引表

非常感謝您的幫助或一些想法

回答

0

您並不需要JOIN同一張表,而您必須做的ORDER BY在內部查詢到正確與WHWRE條款外一個命令:

SET @rownum = 0; 
SELECT t.*, t.rank as TableRank 
FROM 
(
    SELECT *, (@rownum := @rownum + 1) as rank 
    FROM categories c 
    ORDER BY c.cat_name 
) t 
WHERE rank BETWEEN ((@PageNum - 1) * @PageSize + 1) 
AND (@PageNum * @PageSize) 
+0

非常感謝您的回覆,我不知道在哪裏IAM做錯誤的,它不工作對我來說。 Iam試圖寫分頁查詢,這將是非常快的,包含1 000 000條記錄在表中,包括條件和順序通過排序...這等於結果.... select * from category where category_group ='parts'and category_id ='12452'order by category_name limit 800 000,20。但沒有限制條款慢(f.e.limit 800 000,20)。我不知道如何實現快速排序。我在數據庫上創建了索引,但對我來說仍然很慢。任何幫助或評論將對我有幫助 – petran