|
这更像是一个题目,而不是我必要办理的题目.我的后端很快,我的查询运行得很好,以是它并不重要.好的,可是让我们开始吧.
我的仪表板上有4个统计小组,关于本日,昨天,本周和本月的寓目录数;每小我私人在我的数据库中占用一个查询.我想知道的是,怎样将全部这些查询放在一路以减轻数据库/处事器上的负载?
我在扣问之前正在查察Stackoverflow,看到一小我私人说的话:
SUM(case when status = 'open' then 1 else 0 end) as [Open],SUM(case when status = 'closed' then 1 else 0 end) as [Closed]
资料来历:Gathering multiple statistics about a table in a single query
这也许是我必要的,也许是这样的:
SUM(case when DATE(created_at) = '2015-07-23' then 1 else 0 end) as today,SUM(case when DATE(created_at) = '2015-07-22' then 1 else 0 end) as yesterday,SUM(case when WEEK(created_at) = '29' then 1 else 0 end) as week,SUM(case when MONTH(created_at) = '7' then 1 else 0 end) as month
我只是想知道是否有人有更好的提议,由于我已将此应用于我的成果,它事变得很好.
最佳谜底
评述提供了很好的提醒.我将在这里提供另一个设法,观念上用于我一向在行使的大大都银行.
假若稀有十亿行,而且您不必要为每个哀求提供精确的即时快照(意味着:您对轻微过期的数据有容忍度),则值得试探批处理赏罚进程.
这是它的事变道理:
>您界说了滞后容差:譬喻:“我对数据过期8小时没题目”.这是批处理赏罚的周期性. >您对数据库举办非类型化,以添加存储您选择的运行总计的“冗余”列/表.譬喻,您将添加一个名为statistics_snapshot的表,个中包括4列:(时刻戳,月,日,周)或相同的内容. >您在mysql中建设一个存储进程,用您的4个查询添补此表,可能凭证您的提议添补一个全局查询.时刻戳也会被注册,因此您知道它何时被拍摄. >仅为该进程建设具有EXECUTE授权的用户.
CREATE USER 'cron_mysql_user'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT EXECUTE ON PROCEDURE db_name.proc_name TO 'cron_mysql_user'@'localhost';
>您行使DBMS_JOB cron功课毗连mysql并行使第1点中界说的周期运行此进程.凡是,您可以从呼吁行运行剧本,如下所示:
mysql --user='cron_mysql_user'@'localhost' -pstrongpassword --execute="call proc_name()" db_name
>您可以按照按期快照建设大度的陈诉:-)
这样做的甜头是,您天天只能以受控方法齐集I / O屡次,因此当您必要相识统计信息时,您只必要执行很是轻松的SELECT语句.
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|