MySQL中索引的类型

一般可分为四类:

  • 普通索引:最普通的索引
  • 唯一索引:索引列的值必须唯一,但允许有空值
  • 主键索引:一种特殊的唯一索引,不允许有空值
  • 联合索引:索引列有多个字段,使用时需要满足最左前缀原则

普通索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

1.创建索引

代码如下:

CREATE INDEX indexName ON mytable(username(length));

2.修改表结构

代码如下:

ALTER mytable ADD INDEX [indexName] ON (username(length))
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)));
DROP INDEX [indexName] ON mytable;

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

CREATE UNIQUE INDEX indexName ON mytable(username(length))
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
CREATE TABLE mytable(  ID INT NOT NULL,  username VARCHAR(16) NOT NULL,  UNIQUE [indexName] (username(length))  );

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

代码如下:

CREATE TABLE mytable(  ID INT NOT NULL,  username VARCHAR(16) NOT NULL,  PRIMARY KEY(ID) );

联合索引

为了形象地对比单列索引和组合索引,为表添加多个字段:

CREATE TABLE mytable(  ID INT NOT NULL,  username VARCHAR(16) NOT NULL,  city VARCHAR(50) NOT NULL,  age INT NOT NULL );

代码如下:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);

索引不是每次都可以生效的,如果我们操作不对,那么很有可能是走全表扫描而不是走的索引,Explain 中的 possible_key、key_len 以及 key 参数都可以分析我们的 SQL 语句是否用到了索引。

以下情况将会导致索引失效

  1. 查询的列中使用了 != 比如 select id,name,age from student where id != 2;
  2. 查询的列中使用了函数操作,比如 pow(id,2) 对 id 做平方这种函数表达式,也不会用到索引
  3. 如果条件中有 or,即使其中有部分条件带索引也不会使用(这也是为什么尽量少用or的原因)
  4. 联合索引中即使满足最左前缀原则,但是第一个条件带了范围查询,那么也不会用到索引
  5. 存在索引列的数据类型隐形转换,则用不上索引,比如列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  6. 如果 MySQL 估计使用全表扫描要比使用索引快,则不使用索引

更多相关文章

  1. MySQL 什么时候使用INNER JOIN 或 LEFT JOIN
  2. Android上的模拟点击
  3. [android源码下载索引贴】微信+二维码那都不是事......
  4. Android(安卓)获取存储卡路径和空间使用情况
  5. Error:Uncaught translation error: com.android.dx.cf.code.Sim
  6. android触控,先了解MotionEvent
  7. 查看基于Android(安卓)系统单个进程内存、CPU使用情况的几种方法
  8. 系出名门 Android(安卓)系列文章索引
  9. 系出名门 Android(安卓)系列文章索引

随机推荐

  1. Android 为 Android 开发访问 JAX-RS Web
  2. android电话流程(打电话,接电话,挂断电话)
  3. android 图形底层实现
  4. android手把手教你开发launcher(一)(Android
  5. Android(安卓)ListView几个比较特别的属
  6. Android(安卓)Studio使用Volley
  7. Android开发学习总结(一)——搭建最新版
  8. android xmlns:android的作用
  9. Android中应用多进程的整理总结
  10. Android和IOS系统对比