1、为什么要进行SQL优化?

    1.1  查询性能低

    1.2  执行时间过长

    1.3  等待时间过长

    1.4  SQL写的太差(尤其是多表关联查询)

    1.5  索引失效

    1.6  服务器参数(缓存、线程数)设置不合理

    1.7  项目需求不合理

    ......

    程序员关注的主要是SQL、索引

2、MySQL执行过程

    2.1  前言:

          MySQL服务器在接收到客户端发来的SQL语句,是不能够马上执行该SQL语句;

          该SQL需要进行一系列复杂的过程,最终转变为二进制的机器码,才能被执行;

    2.2  SQL执行流程

        

        

    2.3  SQL执行顺序

        

    2.4  SQL优化的目标

          主要是对索引的有效使用

3、数据库索引

    3.1

    3.2  案例

      

      索引的目的:减少磁盘的IO次数,从而提升性能;

          【扩展】:

              一个3层的B+树的数据结构,可以容纳上百万条数据,查询某个数据,只需要3次IO,效率极高;

    3.3  索引的利弊

          利

              减少IO次数,提高查询效率;

              降低CPU的使用率;

          

              占用磁盘的存储空间(索引本身也是文件);

              不适用索引的情况:

                  数据量小的表;

                  频繁变动的字段;

                  不经常查询的字段;

                  对增删改操作效率降低(需要重新维护索引);

              【备注】:

                  查询优化器  会对  使用索引、不使用索引  进行比对,如果发现不使用效率更高,则不会使用索引(索引的使用与否  由  查询优化器  决定);

    3.4  索引的分类

          同一张表  可以有  多个不同的索引;

          3.4.1  主键索引

          3.4.2  单列索引

                单独对表中的某个列做索引(根据需求);

          3.4.3  唯一索引

                该列数据中没有重复数据,都是唯一的;

          3.4.4  复合索引

                项目中使用最多的;

                实际需求中  往往是按照多个条件进行查询,而mysql在查询时只会选择其中一个做索引(最优的  执行计划);

                复合索引的规则比较严格;

    3.5  SQL执行计划

          3.5.1  前言

                SQL语句执行之前,SQL优化器  会对   SQL语句  进行优化和调整,最后生成最优的SQL执行计划

                最终执行的SQL不一定是我们当初编写的SQL;

          3.5.2  查看SQL执行计划

                explain SQL语句;

          3.5.3  执行计划详解

                

                id:SQL执行的序列号

                    如果有多个,数字大的优先执行;如果相同,依次执行;

                select_type:查询的类型

                    

                table:数据来自哪张表;

                type:显示   连接使用哪种类别、有无使用索引(explain工具分析最重要的);

                    

                    

                possible_keys:可以使用的索引;

                key:SQL执行时真正用到的索引;

                key_len:mysql决定使用的键长度

                    长度越短越好;

                ref:参数类型;

                rows:要达到结果,必须搜索多少行数据;

                Extra:mysql解决问题的详细信息(关键参考项之一);

                    

4、SQL优化

    4.1  适当使用索引

        4.1.1  建索引的原则

              a,频繁作为查询条件的字段建索引,eg:关联查询的外键...

              b,唯一性差 的字段,不适合 单独创建索引;

                c,更新频繁的字段,不合适建索引;

              d,不会出现在where语句中的字段,不适合建索引;

        4.1.2  join的原则

              a,不要使用inner join ,原因是SQL执行顺序;

              b,数据量小的表写在join左边,数据量大的写在join的右边;

                  mysql中的join使用Nested Loop join来实现(循环嵌套):

                      数据量小的为外层循环、数据量大的为内层循环,最后合并结果;

              c,优先优化内层循环;

              d,保证join语句中  被作为连接条件的字段已经建立了索引;

              e,扩大缓冲区的大小,容纳更多的查询数据(BDA的职责);

        4.1.3  避免索引失效

              

关系型数据库---MYSQL---优化的更多相关文章

  1. Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql

    一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...

  2. MongoDB 与传统关系型数据库mysql比较

    与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...

  3. 关系型数据库MySQL多实例

    简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...

  4. 关系型数据库MySql简介

    什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...

  5. 数据库 mysql 优化器原理

    MySQL查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行. 你的最终目标是提交SELECT语句查找数据行,而不是排除数据行.优化器试图排除数据 ...

  6. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  7. Python3爬虫(九) 数据存储之关系型数据库MySQL

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 关系型数据库关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列 ...

  8. sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理

    .关系型数据库 有库有表,有关系 非关系型数据库  存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...

  9. 数据库mysql优化方案

    1.创建索引对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据 ...

  10. 关系型数据库MySQL主从同步-读写分离

    1.环境准备 我的数据库版本是MySQL 5.6 MySQL主机至少两个实例,可以是多实例,可以是多台主机 关闭selinux,关闭防火墙等基础优化 2.安装 yum -y install make ...

随机推荐

  1. 【HDOJ6651】Final Exam(贪心)

    题意:有n门课,价值之和为m,每门课的价值可能是0到m 一门价值为x的课需要花至少x+1时间准备才能通过 问不管价值如何分配都能通过至少k门课的最小总准备时间 m,n,k<=1e9 思路: #i ...

  2. Shiro学习资料

    这篇博客的作者是张开涛,他写了很多专题文章,值得关注一下. 博客专栏 - 跟我学Shirohttp://www.iteye.com/blogs/subjects/shiro

  3. HTTP和HTTPS协议,详解

    大纲 一.前言: 先来观察这两张图,第一张访问域名http://www.12306.cn,谷歌浏览器提示不安全链接,第二张是https://kyfw.12306.cn/otn/regist/init, ...

  4. Jmeter 中文乱码解决方案

    中文乱码一直都是比较让人棘手的问题,我们在使用Jmeter的过程中,也会遇到中文乱码问题,我查阅网上的资料解决方案都大同小异,而且不够全面或者不够详细,经过潜心研究终有所得,现在我将jmeter乱码解 ...

  5. LightOJ 1342 Aladdin and the Magical Sticks [想法题]

    题目链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=27050 --------------------------- ...

  6. 网络设备MIB浏览器ifType、ifDescr、ifMtu、ifInOctets等的含义(Zabbix SNMP)

    1.ifType 接口的类型 取值117表示接口为GigabitEthernet (取值62表示接口为 FastEnthernet) 2.ifDescr 接口类型的描述 有GigabitEtherne ...

  7. 最长连续公共子序列(LCS)与最长递增公共子序列(LIS)

    最长公共子序列(不连续) 实际问题中也有比较多的应用,比如,论文查重这种,就是很实际的一个使用方面. 这个应该是最常见的一种了,不再赘述,直接按照转移方程来进行: 按最普通的方式就是,直接构造二维矩阵 ...

  8. C++中使用CMake编译管理项目

    CMake是一个跨平台的Makefile生成工具,可以根据特定的规则生成相应的Makefile文件,并对C/C++源代码进行编译和管理. 有一篇博客介绍CMake的使用,比较通俗易懂,链接地址是:Cm ...

  9. 12、numpy——数学函数

    NumPy 数学函数 NumPy 包含大量的各种数学运算的函数,包括三角函数,算术运算的函数,复数处理函数等. 1.三角函数 NumPy 提供了标准的三角函数:sin().cos().tan(). i ...

  10. python最新字符串学习总结

    names="hello word" len() title() formate 格式化 split join find() replace() startswith() ends ...