一、索引

1、分类

(1)主键索引:当一张表的某个字段设置为主键时,该字段就是主键索引;

(2)唯一索引:索引列中的值必须是唯一的,但是允许为空值(可以存在多个null);

(3)普通索引:基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点;

(4)全文索引:全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引,介绍了要求,说说什么是全文索引,就是在一堆文字中,通过其中的某个关键字等,就能找到该字段所属的记录行,比如有"你真的是一个好人" 通过“一个好人”,可能就可以找到该条记录。

  在模糊查询中使用全文索引:select * from user where match(name) against ('zhang')  格式: match(列名, ...) against ('搜索的关键字')。

  全文索引中,有一个叫做停止词。因为在一个文本中,创建索引是一个无穷大的数,所以对一些常用词和字符,就不会创建索引,这些词被称为停止词。

2、查询索引

show index(es) from 表名
show keys from 表名

3、为什么建立索引之后查询速度变快?

因为索引使用了二叉树的数据结构,所以速度快;索引文件会占用磁盘空间;创建索引后进行增删改操作就会变慢,因为要重新调整二叉树;

二、索引使用的注意事项

1、在哪些列上适合添加索引?

(1)列比较频繁的作为查询条件,应该创建索引

(2)唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件;

(3)更新非常频繁的字段不适合创建索引;

(4)不会出现在 WHERE 子句中字段不该创建;

2、索引的使用

(1)查询要使用索引最重要的条件是查询条件中需要使用索引;

(2)对于创建的多列索引,只要查询条件使用了索引中最左边的列,索引一般就会被使用;

(3)对于使用 like 的查询,查询如果是 '%aaa' 不会使用到索引,'aaa%' 会使用到索引。

3、不会使用索引的情况:

(1)如果条件中有 OR,即使其中有条件带索引也不会使用;

(2)对于多列索引,不是使用的最左边的列作为条件,则不会被使用;

(3)like 查询以 % 开头,不会使用索引;即在 like 查询时,查询的关键字前面不能使用% (或 _)这样的字符,如果一定前面有变化的值,则考虑全文索引。

(4)如果列类型是字符串,那一定要在条件中将数据使用引号引起来,否则不会使用索引;

(5)如果Mysql 估计使用全表扫描要比使用索引快,则不使用索引;

三、通过 explain 语句分析,mysql 如何执行你的 sql 语句

explain查询sql执行计划,各列含义:
table:表名;
type:连接的类型

-system:表只有一行
    -const:主键、索引。即表最多有一个匹配;
    -eq_reg:主键、索引的范围查找;
    -ref:连接的查找(join)
    -range:索引的范围查找;
    -index:索引的扫描;
    -all:全表扫描;
possible_keys:可能用到的索引;
key:实际使用的索引;
key_len:索引的长度,越短越好;
ref:索引的哪一列被使用了,常数较好;
rows:mysql认为必须检查的用来返回请求数据的行数;
extra:using filesort、using temporary(常出现在使用order by时)时需要优化。
    -Using filesort  额外排序。看到这个的时候,查询就需要优化了
    -Using temporary 使用了临时表。看到这个的时候,也需要优化。

MySQL优化(五) SQL 语句的优化 索引、explain的更多相关文章

  1. Mysql 52条SQL语句性能优化策略汇总

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行null值判断,创建表时NULL是默认值,但大多数时候应 ...

  2. 浅谈mysql配置优化和sql语句优化【转】

    做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...

  3. MySQL索引详解(优缺点,何时需要/不需要创建索引,索引及sql语句的优化)

     一.什么是索引? 索引是对数据库表中的一列或多列值进行排序的一种结构,使用索引可以快速访问数据库表中的特定信息. 二.索引的作用? 索引相当于图书上的目录,可以根据目录上的页码快速找到所需的内容,提 ...

  4. mysql学习之 sql语句的技巧及优化

    一.sql中使用正则表达式 select name,email from user where email Regexp "@163[.,]com$"; sql语句中使用Regex ...

  5. MYSQL学习笔记——sql语句优化工具

    优化sql:思路: 使用explan->先查询type类型看看是all还是ref,然后判断 possible_keys (显示可能应用在这张表中的索引, 一个或多个.查询涉及到的字段是若存在索引 ...

  6. mysql优化和sql语句优化总结

    mysql性能优化 1. EXPLAIN 你的 SELECT 查询.使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的.这可以帮你分析你的查询语句或是表结构的性能瓶颈. 2. ...

  7. oracle中sql语句的优化

    oracle中sql语句的优化 一.执行顺序及优化细则 1.表名顺序优化 (1) 基础表放下面,当两表进行关联时数据量少的表的表名放右边表或视图: Student_info   (30000条数据)D ...

  8. SQL语句常见优化十大案例

    1.慢SQL消耗了70%~90%的数据库CPU资源: 2.SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低:3.SQL语句可以有不同的写法: 1 ...

  9. MySQL中的SQL的常见优化策略

    MySQL中的SQL的常见优化策略 MySQL中的索引优化 MySQL中的索引简介 1 避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索 ...

  10. 52 条 SQL 语句性能优化策略,建议收藏

    本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行nul ...

随机推荐

  1. 18.2 of的函数集中的of是Open Firmware的缩写

    内核中操作dtb的一套函数都是of开头,这个of是open firmware.dts的方法来源于open Firmware On Sun SPARC systems, the Open Firmwar ...

  2. SVN远程管理

    1.使用远程桌面连接工具,分别填写连接地址和用户名进行连接 2.紧接着进行安全登录. 3.打开VisualSVN Server Manager工具进行显示已经拥有的项目和分配好的群组管理. 这样子就可 ...

  3. 【剑指offer】合并有序链表

    输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. *思路:假设两个链表的当前结点为n1(list1),n2(list2)比较链表结点值的大小,如果n1.va ...

  4. Ajax传递json数据简介和一个需要注意的小问题

    Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...

  5. django 分页和中间件

    分页 Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views h ...

  6. RobotFramework - AppiumLibrary 之元素定位

    一.介绍 AppiumLibrary 是 Robot Framework 的App测试库. 它使用Appium 与Android 和 iOS应用程序进行通信,类似于Selenium WebDriver ...

  7. Java锁----Lock实现原理

    转载. https://blog.csdn.net/wl6965307/article/details/51249156 Lock完全用Java写成,在java这个层面是无关JVM实现的. 在java ...

  8. gentoo usb serial ch340 16进制读写

    首先安装包含 lsusb 命令的 usbutils, emerge -v usbutils. 使用 lsusb后,可以查看到 ch340 的信息: Bus 001 Device 004: ID 1a8 ...

  9. Centos Tomcat监控

    1.Window环境下jdk的bin目录中提供jvisualvm.exe工具,但是linux环境中的jdk未提供. 用window下的jvisualvm远程监控linux环境下的tomcat 两种连接 ...

  10. json字符串装List<Object>

    List<SearchParam> ts = (List<SearchParam>) JSONArray.parseArray(jsonStr, SearchParam.cla ...