1、什么是子查询、表关联查询:

子查询:是指在主sql语句中的select或where子句中使用select查询语句;select a.name,(select b.name from b where b.id=a.id) from a where a.name lik 'a%'

表关联查询:指多个表联合查询。select a.name,b.name from a,b where a.id=b.id and a.name like 'a%';

尽管联合查询性能并不佳。可是和 MySQL 的子查询比起来还是有非常大的性能优势。

MySQL 的子查询运行计划一直存在较大的问题。尽管这个问题已经存在多年。可是到眼下已经公布的全部稳定版本号中都普遍存在,一直没有太大改善。

尽管官方也在非常早就承认这一问题。而且承诺尽快解决。可是至少到眼下为止我们还没有看到哪一个版本号较好的攻克了这一问题。

默认情况,子查询中使用全表扫描,所以总的I/O次数=主表数*子表数。

当主表、子表中数据均查过1w时,使用子查询的总体性能就会马上下降。并且下降的会非常厉害(測试发现大概须要10s多)





针对上面问题,解决方式:

1)对子表中的关联列建立索引、或建立外键关系:

例如以下有两张表a、b。使用子查询其运行计划例如以下

a表结构:

mysql数据库sql优化——子查询优化的更多相关文章

  1. 我的mysql数据库sql优化原则

    原文 我的mysql数据库sql优化原则 一.前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待. ...

  2. mysql数据库sql优化

    此文章为转载 一. 前提 这里的原则 只是针对mysql数据库,其他的数据库 某些是殊途同归,某些还是存在差异.我总结的也是mysql普遍的规则,对于某些特殊情况得特殊对待.在构造sql语句的时候养成 ...

  3. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  4. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...

  5. mysql数据库SQL执行分析,优化前必备分析

    概述 一般我们在对mysql数据库做优化,肯定需要对慢sql去做分析才能开始优化,那么有什么分析的方法呢?下面通过对sql执行时间和执行情况来做分析. 一.SQL 执行时间分析 通过找到执行时间长的 ...

  6. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  7. Mysql数据库性能优化(一)

    参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要 ...

  8. 关于数据库SQL优化

    1.数据库访问优化   要正确的优化SQL,我们需要快速定位能性的瓶颈点,也就是说快速找到我们SQL主要的开销在哪里?而大多数情况性能最慢的设备会是瓶颈点,如下载时网络速度可能会是瓶颈点,本地复制文件 ...

  9. SQL优化- 数据库SQL优化——使用EXIST代替IN

    数据库SQL优化——使用EXIST代替IN 1,查询进行优化,应尽量避免全表扫描 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引 . 尝试下面的 ...

随机推荐

  1. POI-word转html

    package com.test.poiword; import android.app.Activity; import android.os.Bundle; import android.webk ...

  2. 【VBA编程】10.自定义集合

    自定义集合类型,类似于变量声明,只是要将Dim关键字和New collection关键字搭配起来使用,其语法描述如下:其中集合名的命名方式同于标准变量的命名 Dim 集合名 As New collec ...

  3. 全排列算法 --javascript 实现

    var Ann = function a(arr){ if(arr.length == 1){return arr;} var rr = new Array(); for(var i = 0; i&l ...

  4. 【PHP】导入、导出Excel表格(有使用PHPExcel和不使用的两个版本)

    ------------        首先,导出excel          ---------------- 一.不使用PHPExcel的版本,很简单的一个方法,简洁.推荐 很简单的导出一个exc ...

  5. python 安装 pyinstall 编译exe文件

    $ pip install future 安装PyInstaller之前需确认首先安装了pywin32 下载地址:http://nchc.dl.sourceforge.net/project/pywi ...

  6. Application Request Route实现IIS Server Farms集群负载详解(转)

    http://www.cnblogs.com/knowledgesea/p/5099893.html http://www.cnblogs.com/smileberry/p/4300849.html

  7. memcahced&redis命令行cmd下的操作

    一.memcahced   1.安装 执行memcached.exe -d install 把memcached加入到服务中 执行memcached.exe -d uninstall 卸载memcac ...

  8. jcifs 具体解释读取网络共享文件数据

    时隔1年半,没有发过新的帖子了,也没怎么来过CSDN逛逛了,人也懒散了. 今天收到网友的提问,才回来看看.认为应该再写点什么出来.只是.发现自己研究是不是太深入,写不出那么高深的东西.那就写点肤浅的东 ...

  9. uva 10808 - Rational Resistors(基尔霍夫定律+高斯消元)

    题目链接:uva 10808 - Rational Resistors 题目大意:给出一个博阿含n个节点,m条导线的电阻网络,求节点a和b之间的等效电阻. 解题思路:基尔霍夫定律,不论什么一点的电流向 ...

  10. iOS 给tableView设置contentInset不生效?

    给tableView设置contentInset的时候如果tableView中内容比较多,超过一个屏幕,设置的contentInset是生效的,但是呢,如果页面内容比较少,我们会发现设置content ...