MYSQL索引有四种

PRIMARY(唯一且不能为空一张表只能有一个主键索引)、

INDEX(普通索引)、

UNIQUE(唯一性索引)、

FULLTEXT(全文索引:用于搜索很长一篇文章的时候,效果最好。用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以)

ALTER TABLE t_user ADD INDEX name_city_phone(USERNAME,CITY,PHONE)  //普通复合索引

ALTER TABLE t_user ADD UNIQUE name_city_phone(USERNAME,CITY,PHONE) //唯一复合索引
  这样的组合索引,其实相当于分别建立了三个索引。
  为什么没有(CITY,PHONE)索引这是因为MYSQL组合查询只从最左边开始组合:始终包含username 【最左前缀匹配原则】
  1.USERANME,CITY,PHONE  
  2.USERNAME,CITY  
  3.USERNAME,PHONE
  并不是查询语句包含这三列就会用到该组合索引:
  这样的查询语句才会用到创建的组合索引

SELECT * FROM t_user where USERNAME="parry" and CITY="广州" and PHONE="180"
SELECT * FROM t_user where USERNAME="parry" and CITY="广州"
SELECT * FROM t_user where USERNAME="parry" and PHONE="180"

  这样的查询语句是不会用到创建的组合索引,但是会走整个索引,只是效率低下 

SELECT * FROM t_user where CITY="广州" and PHONE="180"
SELECT * FROM t_user where CITY="广州"

explain结果中的type字段。查询中分别是:

  • type: index   //没有按照复合索引顺序
  • type: ref       //按照顺序

index:这种类型表示mysql会对整个该索引进行扫描。要想用到这种类型的索引,只要是索引,或者某个联合索引的一部分,mysql都可能会采用index类型的方式扫描。但是呢,缺点是效率不高,
ref:这种类型表示mysql会根据特定的算法快速查找到某个符合条件的索引,不会对索引中每一个数据都进行一一的扫描判断,会更快的取出数据。索引字段的数据必须是有序的,才能实现这种类型的查找。

tip:

虽然索引提高了查询的速度,但是降低了INSERT、UPDATE、DELETE(DML)的速度,因为在插入、修改、删除数据时,还要同时操作一下索引文件;

BTREE索引最左前缀匹配原则使用注意事项:

  • 最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。【范围查询的字段,在建立复合索引一定要置后】
  • =和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式

索引使用注意事项:

1.索引会忽略null值,所以我们在设计数据库的时候设置为为NOT NULL;

2.短索引(给索引设置长度)不仅能够提高查询速度,而且能节省I/O操作。

3.  Mysql在查询的时候只会使用一个索引,但不是一个字段

4. 不鼓励使用like对索引操作:like"%aaa%"不会使用索引;但like“aaa%”会使用索引。即可以对固定起始值模糊查询

5.不适用于否地操作(not in , <>, !=,or) //用到or地方,尽量用union,或者程序两次查找

6.如果创建了索引,但是查询语句并没有使用,则会使原来的效率更差

复合索引的优势:

使用多个字段,查询更高效,所以尽量使用复合索引

mysql的两种索引方法(Innodb和MyISAM默认的索引是Btree索引):

1.HASH(用于对等比较,如"="和" <=>")   //<=> 安全的比对   ,用与对null值比较,语义类似is null()

2.BTREE(用于非对等比较,比如范围查询)>,>=,<,<=、BETWEEN、Like

MYSQL索引类型+索引方法的更多相关文章

  1. Mysql 索引类型+索引方法

    MYSQL索引: PRIMARY(唯一且不能为空:一张表只能有一个主键索引). INDEX(普通索引). UNIQUE(唯一性索引). FULLTEXT(全文索引:用于搜索很长一篇文章的时候,效果最好 ...

  2. MySQL进阶之MySQL索引以及索引优化

    本文配合B站学习视频BV1es411u7we使用效果更佳. 1. MySQL版本 主流版本:5.x版 5.0 - 5.1:早期产品的延续,升级维护 5.4 - 5.x:MySQL整合了三方公司的新存储 ...

  3. mysql索引类型和索引方法

    索引类型 mysql索引类型normal,unique,full text的区别是什么? normal:表示普通索引 unique:表示唯一的,不允许重复的索引,如果该字段信息保证不会重复例如身份证号 ...

  4. mysql索引类型-方法-形式-使用时机-不足之处--注意事项

    一.索引的类型 1.普通索引   增加 create  index  index_name on table(colume(length));                       例子:cre ...

  5. mysql索引总结----mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  6. ***mysql索引总结----mysql索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  7. Mysql几种索引类型的区别及适用情况

    如大家所知道的,Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. 那么,这几种索引有什么功能和性能上的不同呢? FULLTEXT 即为全文索引,目前只有MyI ...

  8. mysql索引类型-形式-使用时机-不足之处--注意事项

    一.索引的类型 1.普通索引   增加 create  index  index_name on table(colume(length));                       例子:cre ...

  9. mysql 索引类型

    根据类型分为普通索引2种类型,hash 和b-tree   最常用    hash是按一对一索引的.速度 最快但不支持范围 比如where name = 'dd' 最快.但是使用 date >3 ...

随机推荐

  1. 健壮的网络编程IO函数-RIO包

    RIO包 简介 Rio包即为Robust io函数包.包中函数是对Linux基本I/O函数的封装,使其更加健壮.高效,更适用于网络编程. 分析 Rio包由rio_t结构体和系列函数组成. 首先是两个不 ...

  2. poj3279(枚举)

    题目链接:https://vjudge.net/contest/294982#problem/C 题意:给定由0,1组成的m*n型矩阵,每次翻转一个结点会顺带翻转与其相邻的结点,问将矩阵翻转为全0的最 ...

  3. 【转】 mysql 数据优化

    数据库优化离不开索引,如何理解索引? ---------------------------------------------------------------------------- 可以参考 ...

  4. fragment 与activity通信 Bundle 序列化数据 Serializable

    1.fragment简单套用(静态调用): 新建一个fragment,其xml文件如下: <LinearLayout xmlns:android="http://schemas.and ...

  5. java深拷贝与浅拷贝

    1.调用Object类的clone方法必须实现Cloneable接口,clone属于浅拷贝. 2.可以通过java的反序列化机制进行深拷贝. 3.可以直接用apache提供的一些包进行深拷贝和浅拷贝, ...

  6. http://ctf.bugku.com/challenges#%E6%B8%B8%E6%88%8F%E8%BF%87%E5%85%B3--游戏过关

      做成功这道逆向题了,哈哈哈哈.   启程.   运行了一下子程序,发现它是要保证所有灯亮着才会给flag.如下图所示.   我聪明滴认为首先可以通过关键字符串找到关键代码位置哦. 1.找到关键代码 ...

  7. 【nginx】配置详解

    nginx作为web server,是最常用的网络服务器.来看下它的配置文件. 实验1:最基础的配置(可访问静态资源) 包括listen,server_name,root,index,access_l ...

  8. f5单台安装配置

    1.对设备的管理口进行配置 管理口的默认设置 •IP 地址: 192.168.1.245/24 2.用户名和密码 1)初始密码: 图形界面用户名/密码:admin/admin:命令行用户名/密码:ro ...

  9. mysql系列(2)之 DDL语句

    1.创建数据库test1:create database test1; 2.查询系统中都存在哪些数据库:show databases; 3.选择数据库:use test1; 4.查看数据库中所有的表: ...

  10. 类似No module named 'bs4'等错误的解决方法

    最近开始接触爬虫,写了如下源代码: from bs4 import BeautifulSoup import requests url='https://www.tripadvisor.cn/Attr ...