首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql (MariaDB)每次从视图中读取和读取时的查询?

Mysql (MariaDB)每次从视图中读取和读取时的查询?
EN

Stack Overflow用户
提问于 2014-09-08 09:20:40
回答 1查看 107关注 0票数 0

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

我的问题是关于这些年。

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

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

从select查询创建视图更好吗?

任何其他的想法。

澄清一下,64位Linux的DB是5.5.35-MariaDB。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-08 11:43:05

首先,如果您关心性能,您可能会确保有效地为查询索引数据。仅这一点,如果还没有完成,可能会大大提高您所看到的查询时间。

如果您担心查询的数据不频繁更改,但需要可靠地知道您正在使用的数据是当前的,您可以考虑使用插入触发器创建数据的缓存版本。

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

SELECT date, COUNT(date) AS numberOf FROM myFirstTable GROUP BY date ORDER BY date ASC;

现在,如果不频繁地更改这些信息,我可能希望将此查询的结果缓存在中间表中(这将是生成页面时所使用的数据源)。在myFirstTable上有一个插入触发器,根据需要重新计算这些数据,您可以确保该表中的内容是当前的(假设存在中间表mySecondTable ( DATE,numberOf INT)):

代码语言:javascript
运行
复制
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进行查询,因为您不仅知道正在查询最近的数据,而且(假设您正在进行复杂的查询以生成数据),您还预先加载了在insert语句上生成结果的工作。请注意,这确实会对插入性能产生不利影响,但有一项理解,即它在查询时会提高总体性能。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25720936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档