gpt4 book ai didi

php - Mysql (MariaDB) 每次查询与从 View 读取?

转载 作者:行者123 更新时间:2023-11-29 12:43:52 24 4
gpt4 key购买 nike

我有一个包含约 400 万行数据的数据库 (DB)。一个字段是“时间戳”类型的。来自数据库的数据汇总显示在一系列网页上(太简单了,不能称之为网站)。在第一页上,我从“时间戳”字段中提取所有可用的年份。大约需要8-10秒。数据为实时测量数据,范围为 2009 年至 2014 年。数据每周随机上传一次。

我的问题是关于那几年的。

处理此类信息(接近静态)的最佳方法是什么?

我现在所做的是提取数据一次,然后将其存储在 session 变量中以供进一步使用。

从选择查询创建 View 是否更好?

任何其他想法。

澄清一下,DB 是 5.5.35-MariaDB for 64bit Linux。

谢谢。

最佳答案

首先,如果您担心性能,您可以确保有效地为查询数据建立索引。仅此一项(如果尚未完成)就可以显着缩短您所看到的查询时间。

如果您担心查询的数据不会经常更改,但需要可靠地知道您使用的数据是最新的,您可以考虑使用 INSERT trigger 创建数据的缓存版本。

我设想的场景将有一个辅助表,用于存储查询的中间结果(假设它不仅仅是 SELECT date FROM myFirstTable 类型的查询)。我将使用以下查询来说明我的情况(假设这代表您的第一页数据):

选择日期,COUNT(日期) AS numberOf
来 self 的第一张 table
按日期分组
按日期 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 进行查询,不仅知道您正在查询最近的数据,而且(假设您正在执行复杂的查询来生成数据)您还预先加载了要生成的工作结果在您的插入语句中。请注意,这确实会对插入性能产生不利影响,因为它可以提高查询时的整体性能。

上面的代码未经测试,并且不知道您的确切情况(例如您正在运行的查询、表的名称、是否能够创建新表),我不知道这是否可以完美解决您的问题。

关于php - Mysql (MariaDB) 每次查询与从 View 读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25720936/

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