gpt4 book ai didi

php - mysql优化分页查询

转载 作者:行者123 更新时间:2023-11-30 23:27:28 26 4
gpt4 key购买 nike

请问有人可以帮我加宽这个查询吗?我找不到解决方案。

SELECT *,p.cat_id, cat_name FROM (
选择 cat_id
来自类别
按 cat_id 订购
限制 700000, 10
) o
加入类别 p
ON p.cat_id = o.cat_id
按 p.cat_id 排序

它在有 800 000 条记录的表上非常快,但我需要的是使用 order by 子句和 where claue 对数据进行排序 - 用于分页。如果我使用 order by it 非常慢或者结果排序不正确>

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,自增我在表中的字段上有索引

非常感谢您的帮助或一些想法

最佳答案

您不需要 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)

关于php - mysql优化分页查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12515106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com