http://blog.csdn.net/daybreak1209/article/details/51638187

一、mysql查询类型(默认查询出所有数据列)
1、内连接 
     默认多表关联查询方式,查询出两个表中所有字段;可省略inner join 关键字
2、外连接 查询出某一张表中的所有数据
(1)左连接
      查询出第一张表的所有字段
(2)右连接
 查询出第二张表的所有字段,表一匹配数据为空的返回null

3、子连接

--内连接  查询出bookID=book类型ID的记录
SELECT tb.bookName,tby.bookTypeName FROM t_book tb,t_bookType tby WHERE tb.bookTypeId=tby.id; --外连接(左连接)
SELECT tb.bookName,tby.bookTypeName FROM t_book LEFT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id where ......;
--外连接(右连接)
SELECT tb.bookName,tby.bookTypeName FROM t_book RIGHT JOIN t_bookType ON t_book.bookTypeId=t_bookType.id where ......; --子查询
SELECT * FROM t_book WHERE booktypeId IN (SELECT id FROM t_booktype);
SELECT * FROM t_book WHERE booktypeId NOT IN (SELECT id FROM t_booktype);
SELECT * FROM t_book WHERE price>=(SELECT price FROM t_pricelevel WHERE priceLevel=1);
SELECT * FROM t_book WHERE EXISTS (SELECT * FROM t_booktype);
SELECT * FROM t_book WHERE NOT EXISTS (SELECT * FROM t_booktype);
SELECT * FROM t_book WHERE price>= ANY (SELECT price FROM t_pricelevel);
SELECT * FROM t_book WHERE price>= ALL (SELECT price FROM t_pricelevel);

二、查询优化思路
1、为什么会慢?
     在尝试做查询优化之前,得明白是什么让查询变慢?如果把查询看作一个由n个子任务组成的任务,随着子任务增多,sql关联查询也增多;优化查询,实际上就是优化这n个子任务,要么消除一些子任务,要么减少子任务执行次数。
2、有哪些子任务?
     mysql执行一个查询一般有这么几个流程:客户端发送查询语句到服务端——>服务器解析查询语句——>生成执行计划——>执行查询;其中执行时整个生命周期最重要的阶段,其中包括对数据库引擎的调用、排序、分组的数据处理过程。
三、优化方向
1、优化查询数据
     低效的查询基本原因:访问请求的数据太多,不可避免的需要进行大量筛选工作;
     错误尝试:select * from t_user t inner join t_role r inner join t_permission p where .....
     错误原因:使用内连接,查询出三个表中的所有数据列
     正确方式:select t.name,r.rolename,p.pname from t_user t inner join t_role r inner join t_permission p where
2、切分查询
      分而治之,将复杂的查询切分成小查询,每次查询只返回一小部分结果
      错误尝试:select * from t_user t where createData>DATE_SUB(NOW(),INTERVAL 3 MONTH)
                       delete from t_user t where createData>DATE_SUB(NOW(),INTERVAL 3 MONTH)
     错误原因:当user表中数据量巨大时,一次性查询或删除表中大量数据均会导致等待停顿;
     正确方式:select * from t_user t  where createData>DATE_SUB(NOW(),INTERVAL 3 MONTH)  limit 0,1000;
                     先查询表中符合条件的前一1000条数据;
3、分解关联查询
      错误尝试:select t.name,r.rolename,p.pname from t_user t inner join t_role r inner join t_permission p where
      错误原因:当user表中数据量巨大时,一次性查询或删除表中大量数据均会导致等待停顿;
      正确方式:select * from t_user where  t.age=10;
                       select t. rolename from t_user where ...
                       select t. pname from t_user where ...
       分解关联查询表面上好像原本1个sql就干完的事,现在非得由3个sql去完成,实际上它比关联查询更有优势:
(1)提高缓存效率:对于第一条查询中age=10这条记录的所有字段已经缓存在mysql中,供第二个查询语句使用
(2)减少单个查询间的锁竞争
(3)减少冗余字段的查询     
四、总结
     在平时的应用中,尤其在在java开发提供了良好的数据持久化框架,对于mysql的查询优化并未过分关系,并且在使用sql执行查询时,可能也经常使用到多表关联查询,在使用这些sql拼接的过程中,对于sql优化不能不知晓,在应对高并发问题中,除了在web服务器前做负载、平行扩展等措施之外,数据库高并发的解决方案也与其并重,而这一个一个sql就是应多高并发的优化基础,不容小觑。

MySQL数据库优化(五)——MySQL查询优化的更多相关文章

  1. mysql系列八、mysql数据库优化、慢查询优化、执行计划分析

    mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. 一.介绍 对mysql优化是一个综合性的技术,主要包括 表的设计合理化(符合3NF) 添加适当索引( ...

  2. 50多条mysql数据库优化建议

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的.在非群集索引下,数据在物理上随机存 ...

  3. MySql数据库 优化

    MySQL数据库优化方案 Mysql的优化,大体可以分为三部分:索引的优化,sql慢查询的优化,表的优化. 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更 ...

  4. mysql数据库优化课程---13、mysql基础操作

    mysql数据库优化课程---13.mysql基础操作 一.总结 一句话总结:mysql复制表,索引,视图 1.mysql如何复制表? like select * 1.复制表结构 create tab ...

  5. 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. Mysql数据库优化总结2

    说明:本文的环境为CENTOS 5.5 64 Bit /Mysql 5.1.50 简介:使用Mysql有一段时间了,期间做了不少关于Mysql优化.设计.维护的工作,这两天有时间做一下简单的总结,方便 ...

  7. 解开发者之痛:中国移动MySQL数据库优化最佳实践(转)

    开源数据库MySQL比较容易碰到性能瓶颈,为此经常需要对MySQL数据库进行优化,而MySQL数据库优化需要运维DBA与相关开发共同参与,其中MySQL参数及服务器配置优化主要由运维DBA完成,开发则 ...

  8. 30多条mysql数据库优化方法【转】

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. MySQL数据库优化详解(收藏)

    MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * ...

  10. 转载:30多条mysql数据库优化方法,千万级数据库记录查询轻松解决

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

随机推荐

  1. ztree树节点重叠问题

    使用zTree时,由于同时使用了bootstrap插件,导致样式起了冲突,生成的树都挤在一起了, 最后的解决办法是设置zTreeStyle.css文件的.ztree li ul{}属性,在里面加入he ...

  2. netbeans生成的maven工程没有web.xml文件 如何新建

    使用netbeans生成的maven工程没有web.xml 需要自己新建 步骤: 下一步,完成

  3. sqlserver 2008 R2 安装教程(心得记录)

    在这里简单的记录下自己安装sqlserver的过程吧(本人以前安装失败过,然后卸载了,就一直没用,现在由于工具原因,重新安装,过程相对第一次安装会复杂点) 1.首先,把以前安装的注册表的对应c盘的文件 ...

  4. Django+小程序技术打造微信小程序助手

    Django+小程序技术打造微信小程序助手   整个课程都看完了,当前这个课程的分享可以往下看,下面有某盘的链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,同时也分享下自己的总结 ...

  5. Python学习(二) 基础语法之初看python

    Python 标识符 略 Python保留字符 一大堆,说了未必记得住,编码过程中慢慢去记住. 行和缩进 这个要说一下,学习Python与其他语言最大的区别就是,Python的代码块不使用大括号({} ...

  6. 移动端h5禁用浏览器左滑右滑的前进后退功能

    在项目运行过程中发现,用户在有左右滑动前进后退的功能的浏览器上签字时,偶然触发了前进后退会导致canvas像是重置了一样内容消失,所以需要在代码中处理这种情况. 基本原理就是在touchmove事件中 ...

  7. NFS客户端挂载目录后无写入权限的解决方案

    转载至:https://blog.csdn.net/younger_china/article/details/52089337 在客户机通过 mount -o rw -t nfs 192.168.1 ...

  8. python csv文件打开错误:_csv.Error: line contains NULL byte

    当python读取文件出现_csv.Error: line contains NULL byte时, # -*- coding:utf-8 -*- import csv with open(r'E:\ ...

  9. Git.之.安装

    Git.之.安装 参考Git官网: https://git-scm.com/book/zh/v2 我这里安装的是Window,浏览官文中的安装,如下截图(点击标红的下载) 下载好软件后,双击软件,下一 ...

  10. typescript+react+antd基础环境搭建

    typescript+react+antd基础环境搭建(包含样式定制) tsconfig.json 配置 // 具体配置可以看上面的链接 这里module moduleResolution的配置都会影 ...