2012-09-20 56 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