博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql查询
阅读量:5727 次
发布时间:2019-06-18

本文共 1211 字,大约阅读时间需要 4 分钟。

自然连接查询

通过上面的图我们注意到,自然连接的语法是JOIN  ON,as 后面就是对应表和字段的别名,JOIN后面是连接的表,ON后面是连接的条件。

我们查询的数据量是16000条,我们使用表的引擎是MYISAM。

我们来看这次查询的时间是:4.527ms(这个查询是简单查询,没有加索引)

我们给ON条件的字段加索引,查询的时间是:3.507ms

我们在后面建立了一个复合索引

 

我们再看另一个场景,只出现staff_id和rental_id情景:

 

查询时间是:3.219ms

 

我们现在把三个字段都加上

查询的时间是:1.954ms

为什么会这么神奇,代码就相差一个字段,查询的时间差就很大呢?我来解释一下:我们创建的复合索引,如果让索引生效就要从左向右一次出现对应的字段,不能有空,比如123,你写的是13中间隔了一个,索引就失效。还有一种情况12索引也是生效。因为索引没有生效才会出现这种情况。

我们来看一下子查询

 

所用时间:7.126ms

把他转化成自然连接

所用时间:1.160ms

 

 总结:

1、我们要给自然连接查ON后面的字段加索引来提高查询的效率,注意如果是复合索引,那么我们查询字段顺序一定是按照复合索引从左向右的顺序。

2、我们对比了子查询和自然连接查询,他们相差还是很大的,优化的办法就是我们把子查询转换成自然连接查询。

3、自然连接查询多的时候一定要要给表和字段起别名,为了方便后面查询。如果不这样做就是表名加字段,太长了。SQl语句看起来很乱。

 左连接查询

我们来看查询的效果

这个时候我们会发现,其他的列为空,这是为什么?因为左连接查询是以左表为主,左表有的信息全部查出来,没有就由空代表;

左表的字段

右表的字段

这个时候我们发现,左表有的值,右表没有,这个时候我们是左表为主,所以查不到的就以空代替。

 我们来看查询

查询的时间:2.470ms(不加索引)

加索引的查询时间:1.160ms

总结:

1、左连接查询是以左表为主,如果右表没有的数据就用空代替;

2、在ON子句后面的字段加上索引,可以提高查询的效率;

右连接查询

左表字段(没有customer_id = 3的值)

右表字段:

总结:

1、右连接查询以右表为主,左表没有的值,就用空代替。

2、在ON后面的字段加上索引提高查询的效率;

联合查询

将两次查询的结果合并在一起。

我们再看一种场景,将两个查询的条件写成一样:

会将查询结果一样的合并在一起;

Union ALL

是不会合并一样的结果

总结:

1、联合查询就是将几个查询的结果合并在一起;

2、union查询会将查询结果一样的合并在一起,而union all是不会合并的;

3、union all的效率要比union的高,主要原因是union去重浪费一定的性能。

转载于:https://www.cnblogs.com/liliuguang/p/9167890.html

你可能感兴趣的文章
TRUNK
查看>>
一点不懂到小白的linux系统运维经历分享
查看>>
MDT 2013 从入门到精通之软件自动化部署设置
查看>>
桌面支持--打不开网页上的pdf附件解决办法(ie-tools-compatibility)
查看>>
桌面支持--outlook取消收件规则1
查看>>
nagios监控windows 改了NSclient++默认端口 注意事项
查看>>
儿呀,娘想做你家的一条狗
查看>>
干货 | JAVA代码引起的NATIVE野指针问题(上)
查看>>
POI getDataFormat() 格式对照
查看>>
Project build error: Non-resolvable import POM
查看>>
数据类型
查看>>
Python 中的进程、线程、协程、同步、异步、回调
查看>>
swoft速学~redis引入
查看>>
LTS
查看>>
sublime插件自用
查看>>
Mysql客户端工具可以连接,但是代码访问就会报错
查看>>
Free Windows Applications
查看>>
好的产品原型具有哪些特点?
查看>>
实现java导出文件弹出下载框让用户选择路径
查看>>
刨根问底--技术--jsoup登陆网站
查看>>