我正在处理一个拥有大量数据的项目。数据存储在MySql Db中。 我想从几张表中分页读取记录。其中一张表有超过2百万条记录导致页面冻结很长时间。有时该页面根本无法加载。MySql:增加分页的查询执行时间
我使用来获取记录的查询:
SELECT
EN.`MRN`,
P.`FNAME`,
P.`LNAME`,
P.`MI`,
P.`SSC`,
sum(EN.`AMOUNT`) AS `TOTAL_AMOUNT`
FROM `table_1` AS EN
INNER JOIN `table_2` AS P ON EN.`MRN` = P.`MRN`
GROUP BY EN.`MRN`,P.`FNAME`, P.`LNAME`,P.`MI`,P.`SSC`
HAVING sum(EN.`AMOUNT`) > 0
ORDER BY P.`LNAME`
通过此查询我得到的总记录数的分页工作。然后我再次运行此查询以获取实际记录:
SELECT
EN.`MRN`,
P.`FNAME`,
P.`LNAME`,
P.`MI`,
P.`SSC`,
sum(EN.`AMOUNT`) AS `TOTAL_AMOUNT`
FROM `table_1` AS EN
INNER JOIN `table_2` AS P ON EN.`MRN` = P.`MRN`
GROUP BY EN.`MRN`,P.`FNAME`, P.`LNAME`,P.`MI`,P.`SSC`
HAVING sum(EN.`AMOUNT`) > 0
ORDER BY P.`LNAME`
LIMIT 0, 100
如何使此查询更快地工作。因为第一次执行查询需要很长时间才能获取记录总数。
使用计数来计数记录比选择所有结果更快,然后获得计数。 SELECT count(*)FROM'table_1' AS EN INNER JOIN'table_2' AS P ON EN.'MRN' = P.'MRN' GROUP BY EN.'MRN',P.'FNAME',P。 'LNAME',P.'MI',P.'SSC' HAVING sum(EN.'AMOUNT')> 0 ORDER BY P.'LNAME' –
@pkdq您是否检查过表table_1中有索引的列你选择?如果你没有给出索引,那么把它分配给你主要使用的列。这会让你的执行速度更快。 –
您使用innodb或myisam表吗? – Naruto