优点
有了索引.对于记录数量很多的表,可以提高查询速度.
缺点
索引是占用空间的.
索引会影响update insert delete速度
ALERT!!!
1.索引要创建在where和join用到的字段上.
2.以下操作符号可以应用索引
:<,<=,=,>,>=,BETWEEN,IN,LIKE不以%_开头
以下需要注意不使用索引
<>, NOT IN, LIKE %_开头
<> 可以用 a>1 or a<3 代替,NOT IN 可以用NOT exists代替
3.在使用max() min()时最好加上索引.
4.单索引要创建在确实需要的地方.
5.多列索引 有最佳左前缀特性 所以尽量左边的字段是最常用的.
6.索引不会包括有NULL值,就是有NULL,索引就失效
7.使用短索引,一个字段字太多,可以建立部分索引,只取前十个字.节约空间.
8.不要在列上运算.例如:where MD5(“password”) = “myz”
9.explain select * from myz 来测试一下语句的效率…
输入 explain select * from customer; 后,出现一张表,个行的意思如下:
table-显示此行数据属于哪张表;type-重要的一列,显示使用了何种连接,从好到差依次为const、eq_ref、ref、 range、index、all;possible_keys-可以应用在这张表中的索引,如果为null,则表示没有可用索引;key-实际使用的索 引,如为null,表示没有用到索引;key_len-索引的长度,在不损失精确度的情况下,越短越好;ref-显示索引的哪一列被使用了,如果可能的 话,是个常数;rows-返回请求数  据的行数;extra-关于mysql如何解析查询的额外信息,下面会详细说明。
 
type的描述:system-表只有一行,这是const连接类型的特例;const-表中一个记录的最大值能够匹配这个查询(索引可以是主 键或唯一索引)。因为只有一行,这个值实际就是常数,因为mysql先读这个值,再 把它当作常数对待;eq_ref-从前面的表中,对每一个记录的联合都 从表中读取一个记录。在查询使用索引为主键或唯一索引的全部时使用;ref-只有使用了不是主键或唯一索引的部分时发生。对于前面表的每一 行联合,全部记 录都将从表中读出,这个连接类型严重依赖索引匹配记录的多少-越少越好;range-使用索引返回一个范围中的行,比如使用>或<查找时发 生;index-这个连接类型对前面的表中的每一个记录 联合进行完全扫描(比all好,因为索引一般小于表数据);all-这个连接类型多前面的表中的每 一个记录联合进行完全扫描,这个比较糟糕,应该尽量避免。
 
extra行的描述:distinct-mysql找到了域行联合匹配的行,就不再搜索了;
not exists-mysql优化了left join,一旦找到了匹配left join的行,就不再搜索了;
range checked for each-没找到理想的索引,一次对于从前面表中来的每一个行组合;
record(index map: #)-检查使用哪个索引,并用它从表中返回行,这是使用索引最慢的一种;
using filesort-看到这个就需要优化查询了,mysql需要额外的步骤来发现如何对返回的行排序。他根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行。
using index-列数据是从单单使用了索引中的信息而没有读取实际行的表返回的,这发生在对表的全部的请求列都是同一个索引时;
using temporary-看到这个就需要优化查询了,mysql需要创建一个临时表来查询存储结果,这通常发生在多不同的列表进行order by时,而不是group by;
where used-使用了where从句来限制哪些行将与下一张表匹配或是返回给用户。如不想返回表中用的全部行,并连接类型是all或index,这就会发生,也可能是查询有问题。
10.查看索引信息
show index from tablename;

MySql索引的优缺点的更多相关文章

  1. mysql索引 索引优缺点

    mysql索引索引优化 1.什么是索引?索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息. 2.作用是什么?索引的作用相当于图书的目录,可以根据目录中的页码快 ...

  2. MySQL存储引擎MyISAM和InnoDB,索引结构优缺点

    MySQL存储引擎MyISAM和InnoDB底层索引结构 深入理解MySQL索引底层数据结构与算法 (各种索引结构优缺点) Myisam和Innodb索引实现的不同(存储结构) 存储引擎作用于什么对象 ...

  3. MySQL索引的Index method中btree和hash的优缺点

    MySQL索引的Index method中btree和hash的区别 在MySQL中,大多数索引(如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)都是在BTREE中存储,但使用 ...

  4. mysql_建立索引的优缺点 #转自Starzm#

    建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.         第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.         第二.可以大大加 ...

  5. BTREE与其它索引的优缺点对比

    数据库BTree索引.Hash索引.Bitmap位图索引的优缺点 (2016-01-05 17:13:40) 转载▼ 标签: 数据库 索引 mysql oracle 分类: IT http://www ...

  6. MySQL 索引 总结

    1.索引的种类(六种) 普通索引,唯一索引,全文索引,单列索引,多列索引,空间索引 2.优缺点及注意事项 优点:有了索引,对于记录数量很多的表,可以提高查询速度. 缺点:索引是占用空间的,索引会影响u ...

  7. mysql_建立索引的优缺点

    http://blog.csdn.net/superit401/article/details/51291603 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.  ...

  8. 有关mysql索引

    1.首先我们需要明确一下什么是索引以及为什么要使用索引: 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构.在生产环境中,对于数据库我们最常进行的是查询的操作,而当我们的数据非 ...

  9. MySQL索引原理及优化

    一.各种数据结构介绍 这一小节结合哈希表.完全平衡二叉树.B树以及B+树的优缺点来介绍为什么选择B+树. 假如有这么一张表(表名:sanguo): (1)Hash索引 对name字段建立哈希索引: 根 ...

随机推荐

  1. UVa 11971 Polygon (数学,转化)

    题意:一根长度为n的木条,随机选k个位置将其切成k+1段,问这k+1段能组成k+1条边的多边形的概率. 析:这个题,很明显和 n 是没有任何关系的,因为无论 n 是多少那切多少段都可以,只与切多少段有 ...

  2. HDU/杭电2013多校第三场解题报告

    今天悲剧了,各种被虐啊,还是太年轻了 Crime 这道题目给的时间好长,第一次就想到了暴力,结果华丽丽的TLE了. 后来找了一下,发现前24个是1, 2, 6, 12, 72, 72, 864, 17 ...

  3. 在VB中使用Linq To SQLite注意事项

    昨天使Linq To SQLite 支持VB,今天在VB中写了几条Linq语句,发现了几个问题: 1.在Linq To SQLite中的Linq语句查询后并不是得到的匿名数据类,而是将Linq转换为S ...

  4. contiki makefile框架分析 < contiki学习之一 >

    在linux下的工程编译,基本都可以使用makefile这个工具来完成.Contiki OS亦如此,下面分析contiki整个Makefile的框架,对makefile的具体内容暂不做分析.本文依赖于 ...

  5. PostgreSQL的 initdb 源代码分析之十八

    继续分析: setup_conversion(); 展开: 其实质是: 运行命令:"/home/pgsql/project/bin/postgres" --single -F -O ...

  6. Hyper-V故障转移群集

    Hyper-V故障转移群集配置完成后,在故障转移群集管理器中新建虚机:角色-虚拟机-新建虚拟机 如果直接在Hyper-V管理器中新建虚机,则不是高可用,需要在故障转移群集管理器中将其添加进来使其成为高 ...

  7. 删除目录下的所有".svn"文件

    丢一段python代码: # -*- coding: cp936 -*- import os import re import shutil '''找出路径base(包括子目录)下所有符合patter ...

  8. C# 使用xsd文件验证XML 格式是否正确

    C# 使用xsd文件验证XML 格式是否正确 核心示例代码: //创建xmlDocument XmlDocument doc = new XmlDocument(); //创建声明段 如<?xm ...

  9. MYSQL-- binlog事件详解

    mysqlbinlog -vvv log.000001 # at # :: server id end_log_pos CRC32 sequence_number= SET @@SESSION.GTI ...

  10. du 和 df命令的区别(超赞)

    du和df命令都被用于获得文件系统大小的信息:df用于报告文件系统的总块数及剩余块数,du -s /<filesystem>用于报告文件系统使用的块数.但是,我们可以发现从df命令算出的文 ...