mysql多表查询方式_MySQL多表查询方式问题

你的 SQL 没有用到任何索引,对 a b 两个表都是全表扫描,在数据量小的时候是没有问题的,但是如果数据量超过 100 万,性能问题就会突显出来。

这里不清楚你的 created_at 字段是什么类型,不过从你的代码 DATE_FORMAT(created_at, '%Y-%m-%d') 看来,应该是 DATETIME 或者 TIMESTAMP,这个字段对你的场景来说并不是很友好,如果是我的话,可能会新增一个 DATE 类型的字段 created_at_date 来解决这个问题:

ALTER TABLE `a` ADD COLUMN `created_at_date` DATE;

ALTER TABLE `b` ADD COLUMN `created_at_date` DATE;

ALTER TABLE `a` ADD INDEX `created_at_date` (`created_at_date`);

ALTER TABLE `b` ADD INDEX `created_at_date` (`created_at_date`);

对表中现有的数据,将 created_at_date 设置为 DATE(created_at):

UPDATE `a` SET `created_at_date` = DATE(`created_at`);

UPDATE `b` SET `created_at_date` = DATE(`created_at`);

如果不想改应用层代码,可以创建一个 TRIGGER,自动设置该字段。

其次,不太清楚你的具体需求,不知道是日期出现一次就统计一次,还是只要表中存在该日期,就算一次?如果是情况二,楼上的回答其实就可以了,可以用到 DATE 列的索引:

select c.t,count(*) from (

select a.t,count(*) from a a group by a.t

union all

select b.t,count(*) from b b group by b.t

) c

group by c.t;

如果是情况一,从你写的 SQL 判断可能是这种情况吧。这时要把两个临时表的 DATE 列拿出来做 FULL OUTER JOIN 了,然后计算 a.count + b.count。但是 MYSQL 不支持 FULL OUTER JOIN,可以 用 LEFT OUTER JOIN UNION RIGHT OUTER JOIN 小技巧 来解决,完整的 SQL 如下(仅供参考):

SELECT ta.`created_at_date`, ta.c + IFNULL(tb.c,0) cnt FROM

(

SELECT `created_at_date`, COUNT(*) c FROM a GROUP BY `created_at_date`

) AS ta LEFT OUTER JOIN

(

SELECT `created_at_date`, COUNT(*) c FROM b GROUP BY `created_at_date`

) AS tb ON ta.`created_at_date` = tb.`created_at_date`

UNION

SELECT tb.`created_at_date`, tb.c cnt FROM

(

SELECT `created_at_date`, COUNT(*) c FROM a GROUP BY `created_at_date`

) AS ta RIGHT OUTER JOIN

(

SELECT `created_at_date`, COUNT(*) c FROM b GROUP BY `created_at_date`

) AS tb ON ta.`created_at_date` = tb.`created_at_date`

WHERE ta.c IS NULL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428523.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IpV4 TCP

ipv4头基本是20个字节,最多60个个(IHL域限定4bit 15*460【最多15个4字节,即…

mysql.ini环境配置_MySQL配置文件mysql.ini参数详解

my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数。my.ini分为两块:Client Section和Server Section。Client Section用来配置MySQL客户端参数。要查看配置参数可以用下面的命令:show va…

【BZOJ3677】[Apio2014]连珠线 换根DP

【BZOJ3677】[Apio2014]连珠线 Description 在列奥纳多达芬奇时期,有一个流行的童年游戏,叫做“连珠线”。不出所料,玩这个游戏只需要珠子和线,珠子从1到礼编号,线分为红色和蓝色。游戏开始时,只有1个珠子&…

mysql数据备份在哪里_mysql之数据备份与恢复

本文内容: 复制文件法利用mysqldump利用select into outfile其它(列举但不介绍)首发日期:2018-04-19有些时候,在备份之前要先做flush tables ,确保所有数据都被写入到磁盘中。复制文件法:对于myisam存储引擎的数据库&a…

洛谷 P1852 奇怪的字符串

P1852 奇怪的字符串 题目描述 输入两个01串,输出它们的最长公共子序列的长度 输入输出格式 输入格式:一行,两个01串 输出格式:最长公共子序列的长度 输入输出样例 输入样例#1: 复制 01010101010 00000011111 输出样例#…

steelray project viewer

steelray project viewer是一款英文语言软件,透过Steelray Project Viewer,可以打开、导航、浏览、打印Microsoft Project的.mpp文件。 转载于:https://www.cnblogs.com/hqyj/p/7909858.html

连接mysql报错有乱码_连接mysql服务器报错时,出现乱码

页头用了header(‘content-type:text/html;charsetutf-8’);try{$this->dbonew PDO($dsn,$dbuser,$dbpassword);}catch(Exception $e){echo $e->getMessage();}连接失败时会报错,但是乱码,IE下编码查看是UTF-8,但是是乱码,如…

文档基本结构标签的作用

页面文档的基本结构可以分为四层关系&#xff0c;其中涉及5个重要的结构性标签来构成一个页面&#xff1a;样本代码开始标签头标签和头标签的对象&#xff1a;有六个特殊标签可以放在头标签中使用标题标签主体标签 头标签和头标签的对象&#xff1a; 六个标签为<title>,&…

mysql jdbc字符编码_java中jdbc/sql出现编码问题

com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Unknown column ?????“??? in field listat com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985)at com.mysql.jdbc.MysqlIO.sendC…

BZOJ 1878 HH的项链 | 主席树

题意 询问区间有多少不同的数。 题解 和Luogu 1903一样&#xff0c;这道题也是用pre数组来求区间不同数的个数&#xff0c;这里pre[i]表示a[i]上一次出现的位置 &#xff11;&#xff0c;询问相当于查询区间内有多少pre小于等于左端点。 #include <cstdio> #include <…

python opencv 边缘检测_Python使用Opencv实现边缘检测以及轮廓检测的实现

边缘检测Canny边缘检测器是一种被广泛使用的算法&#xff0c;并被认为是边缘检测最优的算法&#xff0c;该方法使用了比高斯差分算法更复杂的技巧&#xff0c;如多向灰度梯度和滞后阈值化。Canny边缘检测器算法基本步骤&#xff1a;平滑图像&#xff1a;通过使用合适的模糊半径…

web程序入门五(http无状态)

Asp.net中的状态保持方案&#xff1a; ViewState&#xff1a;是donet特有的 微软提供的对象来完成状态保持 ViewState["key1"] 11; 赋值 键值对 形式 object类型 ViewState["key1"] 直接取值&#xff0c;将其转化成相应的类型 原理&#xff1a;本质…

排序算法之冒泡排序

注意第一个for循环i的范围是[1,sz - 1]; 第二个for循环的范围是[0,sz - i]; 因为是j 1<n,所以j < n - 1&#xff0c;所以i最小从1开始。 #include<iostream> #include<vector> using namespace std;void bubblesort(vector<int> &vec) {int sz ve…

vscode里面如何配置库_VS Code配置链接库文件

配置VS code在C语言中调用gsl库文件先确认gsl库&#xff0c;gcc都已正确安装&#xff0c;命令行g -L/usr/local/lib hello.c -o hello -lgsl -lgslcblas -lm没有错误则可以配置VS codetasks.json要配置args字段launch.json要配置environment字段c_cpp_properties.json要配置inc…

支付宝app支付java后台流程、原理分析(含nei wang chuan tou)

java版支付宝app支付流程及原理分析 本实例是基于springmvc框架编写 一、流程步骤 1.执行流程 当手机端app(就是你公司开发的app)在支付页面时&#xff0c;调起服务端(后台第1个创建订单接口)接口&#xff0c;后台把需要调起支付宝支付的参数返回给手机端…

python实现决策树数据直接赋值导入_决策树在python中的数据实现

我为python决策树算法实现完成了以下代码&#xff1a;from csv import readerdef load_csv(filename):file open(filename, "rb")lines reader(file)dataset list(lines)return dataset# Split a dataset based on an attribute and an attribute valuedef test_s…

互评Beta版本(Hello World!——SkyHunter)

1 基于NABCD评论作品&#xff0c;及改进建议 SkyHunter这款游戏我很喜欢&#xff0c;小时候总玩飞机类的游戏&#xff0c;这款游戏我上课的时候试玩了&#xff0c;在我电脑上运行是很好玩的&#xff0c;音乐震撼&#xff0c;画面玄幻&#xff0c;富有金属音乐的味道&#xff0c…

time是python的标准库吗_python3关于date和time的标准库

python3中关于日期和时间的标准库datetime和time&#xff0c;之前都是用的时候随用随查&#xff0c;今天系统的看一下用这两个库可以做些什么。1、time标准库#首先添加一个time对象&#xff0c;看一下该对象的属性和方法>>> import time,datetime>>> a time…

unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度

var arr [1, 2];arr.unshift(0); //result of call is 3, the new array length //arr is [0, 1, 2]arr.unshift(-2, -1); // 5 //arr is [-2, -1, 0, 1, 2]arr.unshift( [-3] ); //arr is [[-3], -2, -1, 0, 1, 2]语法 arr.unshift(element1, ..., elementN)参数列表 elemen…

acctype mysql assoc_DedeCMS V5.3二次开发经验分享

DedeCMS V5.3二次开发经验分享写在前面,DedeCMS系统的模板是非固定的&#xff0c;用户可以在新建栏目时可以自行选择栏目模板&#xff0c;官方仅提供最基本的默认模板&#xff0c;即是内置系统模型的各个模板&#xff0c;由于DedeCMS支持自定义频道模型&#xff0c;用户自定义新…