描述:文本主要用来记录,对大数据量表多表联合的分页查询效率的研究。
技术背景:使用若依框架的前后端分离版本开发。
在项目中,有一张预计100w数据量的表,联合其他状态管理表,做分页查询的任务。会导致前端页面的表格刷的非常慢。
由于项目采用的是 pageHelper第三方的包。该包做分页查询会对sql语句进行封装一层,然后进行 select count(1) { ...}
这会导致查总数的时间花销都好多s了。
于是我变自己封装方法,查询总记录数。然后再传入分页参数,进行分页的查询。虽然还是要1s多,但是总比之前,光查询总数都几十s来的好太多了。
SQL1
SELECT
count(1)
FROM
table_a a
JOIN
table_status ts
ON a.id = ts.a_id
SQL2
SELECT
count( 1 )
FROM
table_a a
WHERE
id IN ( SELECT a_id FROM table_status)
测试结果:经过多次测试,加上时间查询条件,总共40w条记录。方法二使用In 花了2s多,方法一用join花了1s多。
但是要是添加具体的字段。结果就会反过来,数据量越大,差异越明显。
测试中,查询总记录数40w条,使用IN的方式要花2s多,而使用JOIN方法需要花3s多。
测试sql如下:
<SQL1>+
LIMIT 346190,10
似乎2种方式各有各的特点。