1.使用explain语句查看性能mysql> explain select product_id from orders where order_id in (123, 312, 223, 132, 224) \G

2.为什么要创建组合索引呢?如果只有一个索引,2个查询条件的语句中会先去索引查询一个条件,然后mysql要去磁盘上的表里面去查询另一个条件。如果有组合索引的话,mysql可以完全从索引中取到2个查询条件,速度自然会快

3.组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到;即使出现在select里而不是出现在where里也没关系,但是必须要出现;where语句中的顺序没有关系,因为它会自动根据匹配的索引顺序而调整

4.在mysql中执行查询时,只能使用一个索引,如果我们在where条件上分别建多个索引,执行查询时,mysql会选择一个最严格(获得结果集记录数最少)的索引,所以同样SQL的查询也有可能会用到不同的索引,根据返回的数据集的大小来决定。

5.在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边

6. ORDER BY 中的字段必须按照SQL语句中的顺序来建索引;

7. ORDER BY 中的字段的排序顺序必须一直,否则索引无效。
8. 建了索引不一定就有效,用实际的SQL检查一下。

9.建索引的时候,可以根据多个查询场景建多个联合索引(多个查询SQL),mysql会自行选择最优索引来查询(根据上面第4条)。

PS.因此在编写DAO和SQL代码的时候,要根据情况选择是要灵活还是性能,如果是压力很大的SQL,建议单独领出来,方便以后的SQL优化和索引建立,相反,没有性能压力的情况,SQL则可以选择写的通用点,复用性好点。

案例:

一个投票的业务场景中,在查询用户的投票记录中,可以根据投票的活动ID和投票人的ID,2个维度去建立索引,这样的话,在查询的时候,MYSQL会有2个possible_keys可以选择,根据返回的结果选择最适合的key(索引)

注意事项:

当一个表有多条索引可走时,  Mysql  根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 
索引Index_1(Create_Time, Category_ID), Index_2(Category_ID)

如果每天的数据都特别多, 而且有很多category, 但具体每个category的记录不会很多.

当查询SQL条件为select …where create_time ….and category_id=..时, 很可能不走索引Index_1, 而走索引Index_2, 导致查询比较慢.

解决办法是将索引字段的顺序调换一下,改成Index_1(Create_Time, Category_ID), Index_2(Category_ID,Create_Time) ,注意,索引的顺序和最左边的那个索引,将会引导mysql选择成本最小的那个索引。

所以根据业务场景,写适合的索引非常重要

关于复合索引的起作用的情况:

上图是建立索引时起作用的示意图,其中,如果出现查询姓名和性别2个条件的情况,则会只使用姓名的索引,然后走where语句,而不会走完(姓名,年龄,性别)整个复合索引,可以用explain语句看索引长度来看

参考资料:

http://www.cnblogs.com/sunss/archive/2010/09/14/1826112.html

http://www.cnblogs.com/krisy/archive/2013/07/12/3186258.html

http://blog.csdn.net/lmh12506/article/details/8879916

mysql索引使用笔记的更多相关文章

  1. 关于Mysql索引的笔记

    MySQL索引原理 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需 ...

  2. Mysql 索引复习笔记

    之前学习索引后由于一直没怎么用,所以也只是粗略看了一下,最近发现索引的用处很大,并且也很多知识点,在此做复习记录. 什么是索引? 百度百科是这样描述的: 索引是为来加速对表中数据行中的检索而创建的一种 ...

  3. Mysql索引学习笔记

    1.btree索引与hash索引 下列范围查询适用于 btree索引和hash索引: SELECT * FROM t1 WHERE key_col = 1 OR key_col IN (15,18,2 ...

  4. MySQL索引优化 笔记

    少取字段,建立合理的索引 表优化: 1 定长与变长分离 如果都是定长 查询比较快 因为每一行的字节都是固定的 fixed 2 常用字段和不常用字段要分离 用户表 常用 放主表 个人介绍不常用 还比较长 ...

  5. mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用

    版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...

  6. Mysql数据库学习笔记之数据库索引(index)

    什么是索引: SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间. 聚集索引:该索引中键值的逻辑顺序决定了表中相应行的物 ...

  7. MySQL数据库学习笔记(六)----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  8. MySQL数据库学习笔记----MySQL多表查询之外键、表连接、子查询、索引

    本章主要内容: 一.外键 二.表连接 三.子查询 四.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复 ...

  9. SQL学习笔记五之MySQL索引原理与慢查询优化

    阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 四 聚集索引与辅助索引 五 MySQL索引管理 六 测试索引 七 正确使用索引 八 联合索引与覆盖索引 九 查询优化神器-explain 十 慢 ...

随机推荐

  1. G711

    G.711就是语音模拟信号的一种非线性量化.细分有二种:G.711 a-lawand G.711 u-law.不同的国家和地方都会选取一种作为自己的标准. G.711a/u bitrate 是64kb ...

  2. Vmware中为Mac Os安装vmtools

    成功方法: 1. 在VMWare中点击edit this virtual machine 2. 添加CD/DVD,使用iso,找到那个darwin.iso 3. 在setting里面,点击CD/DVD ...

  3. Android_Intent_startActivityForResult

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  4. JAVA_HttpClientUtils

    package org.mobiletrain.utils; import java.io.BufferedInputStream; import java.io.BufferedOutputStre ...

  5. Android 自学之基本界面组件(下)

    按钮(Button)与图片按钮(ImageButton)组件的功能和用法 Button继承了TextView,ImageButton继承了Button.不管是Button还是ImageButton,他 ...

  6. 关于Spring中AOP的理解

    AOP简介[理解][重点] 1.AOP(Aspect Oriented Programing)面向切面/方面编程 2.AOP隶属软件工程的范畴,指导开发人员如何制作开发软件,进行结构设计 3.AOP联 ...

  7. 关于MyBatis的工作流程

    1.从一个jdbc程序开始 public static void main(String[] args) { Connection connection = null; PreparedStateme ...

  8. PHP自动化测试

    参考网址: 1. 基于Jenkins 实现php项目的自动化测试.自动打包和自动部署 2.  PHP Jenkins,参考:http://jenkins-php.org/ 3.安装PHP_CodeSn ...

  9. 忘记root口令的处理方法

    最近在拜读<Unix & Linux 大学教程>这本书,这本书写得不错.关于Unix和Linux比较介绍比较深入根源,内容也比较详细,很值得去拜读.       在书中的附录中有一 ...

  10. Windows7 下安装ORACLE 11G(遇到的问题)

    首先官网下载ORACLE11G(我的电脑是32位) 下载到磁盘后(解压成为一个文件有个DATABASE文件夹) 点击安装 只安装数据库软件(之后再创建数据库:因为容易出问题) 之后的安装过程就跟着走就 ...