优化MySQL查询以进行报告

时间:2019-08-08 15:16:21

标签: mysql stored-procedures reporting

我目前正在使用MySQL 5.7编写一些存储过程。这些存储过程通常联接在具有1-2百万条记录的表上,并根据用户在前端选择的过滤器输出记录。

存储过程具有分页逻辑,该逻辑目前可以像这样工作-

  1. 使用联接中的所有数据创建一个临时表,并在where子句中使用find_in_set过滤数据,然后在所需列上使用Order By子句。
Create temp table Temp AS (
SELECT my req columns
FROM table
# all joins #
WHERE # filters #
Order by columns);
  1. 一旦所有数据都保存在临时表中,就可以这样做:
SET InitialRowCount = (case when PageSize = 0 then 0 else (PageNumber - 1) * FinalPageSize END);
SELECT columns
FROM TempTable
LIMIT InitialRowCount , FinalPageSize;

使用这种方法,我必须始终提取所有数据,无论请求的页码/页面大小如何,并使用给定的过滤器创建一个临时表。

我想知道是否有一种方法可以使我的查询像这样:

User Request - 
Name - matt, john
Last Login - mydate
order by column - last name
page number - 2
page size 30

What I would like to happen -
Select columns
from 
#all joins here#
WHERE Clause
Order By Last Name
AND GIVE Page Number 2 with 30 records

我不想总是提取所有记录并存储在临时表中。我只想查询所需的记录。 目前,我无法在查询中直接使用上述逻辑,因为我没有可以像这样使用的主键:

WHERE pk > initial row count
AND LIMIT pagesize

0 个答案:

没有答案
相关问题