• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL数据库优化(五)—MySQL查询优化

MySQL数据库优化(五)—MySQL查询优化

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了MySQL,数据库优化,查询优化等相关知识,希望本文的分享对您有所帮助
一、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查询优化的内容,更多相关内容请关注微课江湖()!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05Mysql分析-explain的详细介绍
  • 2017-05-11MySql 错误Incorrect string value for column
  • 2018-12-05MyBatis的逆向工程的解析及简单教程(附代码)
  • 2018-12-05MySQL中int、char以及varchar的性能对比
  • 2018-12-05mysql 5.7如何安装 mysql 5.7安装配置教程_MySQL
  • 2017-05-11解决MySQL Workbench gnome-keyring-daemon错误的方法分享
  • 2018-12-05使MySQL查询区分大小写的实现方法
  • 2018-12-05ADODB 入门第1/2页
  • 2017-05-11mysql 超大数据/表管理技巧
  • 2018-12-05如何备份和恢复MSSQL数据库

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQL Server 7.0 入门(一)
    • MS-SQL Server 中单引号的两种处理方法
    • MySQL · 引擎特性 · InnoDB IO子系统的详情介绍
    • Oracle中的INTERVAL数据类型详解
    • oracle 创建表空间详细介绍
    • MySQL主从复制数据一致性校验和修复方法及自动化实现
    • oracle数据库 多张表记录连接union
    • mysql数据库管理员密码忘记如何解决
    • BCP 大容量数据导入导出工具使用步骤
    • 如何利用MySQL数据库命令创建和查看分区情况

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有