首先,如果您关心性能,您可以确保您有效地为查询索引数据。仅此一项,如果尚未完成,就可以显着改善您所看到的查询时间。
如果您担心查询不经常更改的数据,但需要可靠地知道您正在使用的数据是最新的,您可以考虑使用 @987654321 创建数据的缓存版本@。
我设想的场景将有一个存储查询的中间结果的辅助表(假设它不仅仅是SELECT date FROM myFirstTable 类型的查询)。我将使用以下查询来说明我的情况(假设这代表您的第一页数据):
SELECT date, COUNT(date) AS numberOf
FROM myFirstTable
GROUP BY date
ORDER BY date ASC;
现在,假设此信息不经常更改,我可能希望将此查询的结果缓存在一个中间表中(这将是您在生成页面时查询的数据源)。使用 myFirstTable 上的 INSERT 触发器,它会根据需要重新计算此数据,您可以确保该表中的内容是最新的(假设存在中间表 mySecondTable (date DATE, numberOf INT):
CREATE TRIGGER trg_ins_myFirstTable AFTER INSERT ON myFirstTable
FOR EACH ROW
BEGIN
-- flush out intermediate results:
TRUNCATE TABLE mySecondTable;
-- rebuild dataset:
INSERT INTO mySecondTable (date, numberOf)
SELECT date, COUNT(date) AS numberOf
FROM myFirstTable
GROUP BY date
ORDER BY date ASC;
END;
此后,您将从 mySecondTable 而不是 myFirstTable 进行查询,因为您不仅知道您正在查询最近的数据,而且(假设您正在执行复杂的查询来生成数据)您还预先加载了要生成的工作插入语句的结果。请注意,这确实会对插入性能产生不利影响,但要知道它会提高查询时的整体性能。
上面的代码未经测试,并且不知道您的确切情况(例如您正在运行的查询、表的名称、您是否能够创建新表)我不知道这是否可以完美地解决您的问题。