Mysql数据库使用from与join两表查询的方法区别总结
文章主要给大家介绍了关于mysql使用from与join两表查询的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面...
前言
在mysql中,多表连接查询是很常见的需求,在使用多表查询时,可以from多个表,也可以使用join连接连个表
这两种查询有什么区别?哪种查询的效率更高呢? 带着这些疑问,决定动手试试
1.先在本地的mysql上先建两个表one和two
one表
CREATE
TABLE
`one` (
`id`
int
(0)
NOT
NULL
AUTO_INCREMENT,
`one`
varchar
(100)
NOT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE = InnoDB
CHARACTER
SET
= utf8;
two表
CREATE
TABLE
`two` (
`id`
int
(0)
NOT
NULL
AUTO_INCREMENT,
`two`
varchar
(100)
NOT
NULL
,
PRIMARY
KEY
(`id`)
) ENGINE = InnoDB
CHARACTER
SET
= utf8;
先随便插入几条数据,查询看一下;
select
one.id,one.one,two.id,two.two
from
one,two
where
one.id=two.id;
select
one.id,one.one,two.id,two.two
from
one
join
two
on
one.id=two.id;
对比这两次的查询,查询时间几乎没有区别,查看sql运行分析,也没有区别
为了突出两种查询的性能差异,往one表中插入100w条数据,往two表中插入10w条数据,在大量数据面前,一丝一毫的差别也会被无限放大;这时候在来比较一下差异
先使用python往数据库中插入数据,为啥用python,因为python写起了简单
上代码
import pymysql
db = pymysql.
connect
(
"127.0.0.1"
,
'root'
,
"123456"
,
"bruce"
)
cursor
= db.
cursor
()
sql =
"INSERT INTO one (one) values (%s)"
for
i
in
range(1000000):
cursor
.executemany(sql, [
'one'
+ str(i)])
if i % 10000 == 0:
db.
commit
()
print(str(i) +
'次 commit'
)
db.
commit
()
print(
'insert one ok'
)
sql2 =
"INSERT INTO two (two) values (%s)"
for
i
in
range(100000):
cursor
.executemany(sql2, [
'two'
+ str(i)])
if i % 10000 == 0:
db.
commit
()
print(str(i) +
'次 commit'
)
db.
commit
()
print(
'insert two ok'
)
耐心等待一会,插入需要一些时间;
等数据插入完成,来查询一些看看
先使用FROM两个表查询
select
one.id,one.one,two.id,two.two
from
one,two
where
one.id=two.id;
用时大约20.49;
再用JOIN查询看一下
select
one.id,one.one,two.id,two.two
from
one
join
two
on
one.id=two.id;
用时19.45,在10w条数据中,1秒的误差并不算大,
查看一下使用id作为条件约束时的查询
查询时间没有差别
再看一下sql执行分析
结果还是一样的
总结
在mysql中使用FROM查询多表和使用JOIN连接(LEFT JOIN,RIGHT JOIN除外),查询结果,查询效率是一样的
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。
-
Sql Server数据库类似正则表达式的字符处理问题
SQL Serve提供了简单的字符模糊匹配功能,比如:like, patindex,不过对于某些字符处理场景还显得并不足够,日常碰到的几个问题有:...
-
SQL Server数据库中表和索引结构存储的原理及如何加快搜索速度分析
本文详细分析了SQL Server中表和索引结构存储的原理以及对于如何加快搜索速度和提高效率等方面做了详细的分析,以下是主要内容。...
-
SQL Server Page数据库结构深入分析
SQL Server存储数据的基本单元是Page,每一个Page的大小是8KB,数据文件是由Page构成的。在同一个数据库上,每一个Page都有一个唯一的资源标识,标识符由三部分组成...
-
基于Sql server数据库的四种分页方式总结
下面小编就为大家分享一篇基于sqlserver的四种分页方式总结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。...
-
SQL Server 2016数据库快照代理过程详解
本文我们通过SQL Server 2016一个实例数据表,给大家详细分析了快照代理过程遇到的问题和解决办法,并对快照生成过程做了详细说明,以下是全部内容:...
-
关于SQL Serve数据库r帐号被禁用的处理方法
若发现SQL Serve所有帐号不小心被禁用了,这个时候怎么办?用重装吗?不用,仔细看小白是怎么一步一步解开这个谜题的。首先需要Windows帐号设置里重新添加一个新帐号。并将其添加到...
-
SQL数据库查询优化技巧提升网站访问速度的方法
在这篇文章中,我将介绍如何识别导致性能出现问题的查询,如何找出它们的问题所在,以及快速修复这些问题和其他加快查询速度的方法。 你一定知道,一个快速访问的网站能让用...
-
SQL数据库开发中的SSIS 延迟验证方法
验证是一个事件,该事件在Package执行时,第一个被触发,验证能够避免SSIS引擎执行一个有异常的Package或Task。延迟验证(DelayValidation)是把验证操作延迟到Package真正运行(run-ti...
-
SQL Server数据库建立新用户及关联数据库的方法教程
本文讲的是SQLserver数据库创建新用户方法以及赋予此用户特定权限的方法,非常的简单实用,有需要的小伙伴可以参考下...
-
Oracle数据库多条sql执行语句出现错误时的控制方式
多条sql执行时如果在中间的语句出现错误,后续会不会直接执行,如何进行设定,以及其他数据库诸如Mysql是如何对应的,这篇文章将会进行简单的整理和说明。环境准备使用Oracle的精简...