原标题:具体优化查询语句的指导原则小结果集驱动大结果集避免子查询

具体优化Query语句的指导原则

(1)多使用Profile;(2)永远用小结果集驱动大的结果集;(3)尽可能在索引中完成排序;(4)只取自己需要的Columns;(5)仅仅使用最有效的过滤条件;(6)尽可能避免复杂的Join和子查询。

具体优化Query语句的指导原则——永远用小结果集驱动大结果集

使用小表驱动大表,大表经过WHERE条件过滤之后返回的结果集更少的话也应该算为小表。

MySQL只有Nested Loop一种Join方式——MySQL的Join都是通过嵌套循环来实现的。驱动结果集越大,所需要循环就越多,那么被驱动表的访问次数自然也就越多。

Oracle中的Hash Join算法,小结果集驱动大的结果集同样是最优的选择。

优化Join Query最基本的原则就是“小结果集驱动大结果集”,通过这个原则来减少嵌套循环中的循环次数,以减少IO总量及CPU运算的次数。

具体优化Query语句的指导原则——尽可能在索引中完成排序

利用索引进行排序操作,主要是利用了索引的有序性。

具体优化Query语句的指导原则——只取出自己需要的Columns——网络传输

返回的数据都要通过网络数据包传回给客户端,取出的Column越多,须要传输的数据量会越大,不论是从网络带宽方面考虑还是从网络传输的缓冲区来看,这都是一个浪费。

具体优化Query语句的指导原则——只取出自己需要的Columns——排序算法——MySQL 4.1之前的算法

先将要排序的字段和可以直接定位到相关行数据的指针信息取出,然后在设定的排序区(通过参数sort_buffer_size设定)中进行排序,完成排序之后通过行指针信息取出所需的Columns,这种算法须要两次访问数据。

具体优化Query语句的指导原则——只取出自己需要的Columns——排序算法——MySQL 4.1的算法

一次性将所需的Columns全部取出,在排序区排序后直接将数据返回给请求客户端。改进算法只须访问一次数据,减少了大量的随机IO,极大地提高了排序Query语句的效率。

具体优化Query语句的指导原则——只取出自己需要的Columns——排序算法的比较

MySQL 4.1算法一次性取出并缓存的数据比MySQL 4.1之前的算法要多很多,如果将并不需要的Columns也取出来,就会极大地浪费排序过程所需要的内存。

具体优化Query语句的指导原则——只取出自己需要的Columns——排序算法相关设置

可以通过设置max_length_for_sort_data参数来控制MySQL选择第一种排序算法还是第二种。当取出的所有大字段总大小大于的设置时,MySQL就会选择使用第一种排序算法,反之,则会选择第二种。

具体优化Query语句的指导原则——只取出自己需要的Columns——尽量采用MySQL 4.1排序算法

为了尽可能地提高排序性能,当然应该使用MySQL 4.1排序算法,所以在Query中仅仅取出需要的Columns是非常有必要的。

具体优化Query语句的指导原则—— 仅仅使用最有效的过滤条件

WHERE子句中的过滤条件并不是越多越好。Query语句的性能优劣最关键的是要让它选择一条最佳的数据访问路径,做到访问最少的数据量完成自己的任务。

占用空间更大,代表访问该索引须要读取的数据量就会越多。

具体优化Query语句的指导原则——尽可能避免复杂的Join和子查询

Query语句所涉及的表越多,须要锁定的资源就越多。越复杂的Join语句,锁定的资源也就越多,所阻塞的其他线程也就越多。

如果将较复杂的Query语句分拆成多个较简单的Query语句分步执行,每次锁定的资源也就会少很多,所阻塞的其他线程也要少一些。

将复杂Join语句分拆成多个简单的Query语句之后,会增大网络交互。

一个复杂的Join Query语句在执行的时候,须要锁定的资源较多,被别人阻塞的概率也更大,如果是一个简单的Query,由于须要锁定的资源较少,被阻塞的概率也会小很多。所以,较为复杂的Join Query有可能在执行时被阻塞而浪费了更多的时间。数据库并不是只是服务某一个Query请求,还有很多其他的请求,在高并发的系统中,牺牲单个 Query的短暂响应时间而提高整体处理能力是非常值得的。返回搜狐,查看更多

责任编辑:

mysql小结果集驱动大结果集_具体优化查询语句的指导原则小结果集驱动大结果集避免子查询...相关推荐

  1. 小新pro13睡眠后无法唤醒_轻薄的外表狂野的心——联想小新 Pro13 测评

    作为互联网行业从业者,我手上有三台笔记本电脑在用(15.4 英寸的 MacBook Pro.13.3 英寸的 MacBook Pro 和 14 英寸的联想 ThinkPad),但当我拆开包装取出&qu ...

  2. python需要多大的硬盘_适合新手练习的几个python小项目

    关于python练习的小项目,其实就是一些常用的模块的针对练习 一.找出电脑中遗忘的大文件 # !/usr/bin/env python # _*_ coding:utf-8 -*- import o ...

  3. sql查询语句中分组添加小计,GROUPING的使用

    CREATE TABLE #tb_student_score( c_grade NVARCHAR(10), c_class NVARCHAR(10), c_student NVARCHAR(10), ...

  4. fpga驱动rgb液晶屏_用FPGA设计LCD 转 VGA 其实vga和lcd驱动 非常类似

    这个东西其实是在上一个冬天就做完了,而且似乎已经产业化了,当时是为一位朋友做的,这个朋友再卖给产业化的人,就像流于俗套的故事一样,这个朋友拿到了钱,不过不像项目开始时说的那样与我有关.想想多年前一起吃 ...

  5. 小新air15为啥没人买_我为什么放弃了ThinkPad T14、小新Air15,选择入手ThinkBook 14...

    笔记本电脑,也许是最需要精挑细选的产品了.和手机不一样,电脑需要踩的坑,避的雷,实在是太多了,尤其是笔记本电脑. 同样的CPU.显卡,用在不同的机器上,可能完全是两种表现.然后每个人的需求都不同,有的 ...

  6. 小程序能用vue写么_仿网易云音乐APP的微信小程序【小程序和Vue版本】

    小程序版本: 首先是网易云的音乐接口: npm 源码获取见文章底部. 目前实现功能 用户 歌单 FM 播放 评论 MV 专辑 歌手 登录 歌曲红心,FM trash,收藏单曲至歌单 收听记录 歌单歌曲 ...

  7. python大神作品_掌握了这24个顶级Python库,你就是大神!

    全文共11815字,预计学习时长24分钟 Python有以下三个特点: · 易用性和灵活性 · 全行业高接受度:Python无疑是业界最流行的数据科学语言 · 用于数据科学的Python库的数量优势 ...

  8. MySQL 子查询,多表联合查询,视图,存储过程详解

    -----------MySQL数据库中多表联合查询---------- 多表联合查询的理论依据:笛卡尔积 通过笛卡尔乘积,把两个或者多个表变为一个大表,里面包含了有效的,无效的记录(需要加条件进行过 ...

  9. MySQL 表关系及多表操作(联合查询、连接查询、子查询)

    文章目录 表关系 一对一关系 一对多关系 多对多关系 总结 MySQL多表操作 联合查询 联合查询排序 连接查询 交叉连接 内连接 外连接 自然连接 using关键字 子查询 表关系 表关系:一个表代 ...

最新文章

  1. 上传图片或文件 方法一
  2. mingw linux socket,MingW上编译WinSocket程序undefined reference to `WSAStartup@8'报错的解决办法...
  3. JVM初学之JVM的垃圾回收机制与垃圾回收器
  4. 通勤一小时,堵车半小时,AI 救救社畜
  5. 【Antlr】Antlr语法设计
  6. redistemplate hash 过期时间_Redis过期监听——订单超时-取消
  7. 【性能优化】如何让APK瘦成一道闪电
  8. [复习]Python基础回顾
  9. 算法:回溯三 Combination Sum组合总数
  10. hmcl启动器java下载_HMCL启动器|Hello Minecraft! Launcher 3.2 —— Win/Mac苹果系统/Ubuntu|2亿次使用...
  11. 文言文编程可以编译成PHP吗,PSTK项目:文言文也能编程?大四学生发明文言文编程语言...
  12. android手机查看root,怎么看安卓手机是否Root 一键检测手机root方法
  13. Android-SEAndroid权限问题指南
  14. 285. 二叉搜索树中的中序后继
  15. 智能家居普及的最大障碍:如何“排座次”
  16. python的环境问题相关
  17. CentOS 7安装Mongodb并使用Robo 3T远程测试连接
  18. 高倍显微镜ZEMAX设计
  19. 【安全狗高危安全通告】OpenSSL存在远程代码执行漏洞和拒绝服务漏洞
  20. python可以应用于哪些方面?

热门文章

  1. 设计师灵感交流社区|给你的作品一个舞台
  2. 想要学习UI动效设计?从这些软件入手
  3. 教师节PSD分层海报设计模板 | 最好的海报,送给最好的老师们
  4. mysql完备_mysql简单完备脚本
  5. QT创建文件夹(QDir方式)
  6. 地震勘探专业词汇(1)
  7. Redhat或者Centos 手动安装sublime text 3
  8. 大页内存的使用:HugePages(大内存页)的原理与使用
  9. Linux内存管理:分页
  10. C语言嵌入汇编指令(asm)查询系统时间