[索引](http://www.kancloud.cn/phpxy/mysql_cookbook/75310)
[TOC=1,3]
## 索引优点
索引看着挺高大上的一个名字,说白了就是我们书最新面的目录。
假如你用新华字典来查找“张”这个汉字,不使用目录的话,你可能要从新华字典的第一页找到最后一页,可能要花二个小时。字典越厚呢,你花的时间就越多。现在你使用目录来查找“张”这个汉字,张的首字母是z,z开头的汉字从900多页开始,有了这条线索,你查找一个汉字可能只要一分钟,由此可见索引的重要性。
索引用于快速找出在某个列中有一特定值的行。
不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。
当然索引也不易过多,索引越多写入,修改的速度越慢。因为,写入修改数据时,也要修改索引。
## MySQL的索引类型
| 索引类型 | 功能说明 |
| --- | --- |
| 普通索引 | 最基本的索引,它没有任何限制 |
| 唯一索引 | 某一行企用了唯一索引则不准许这一列的行数据中有重复的值。针对这一列的每一行数据都要求是唯一的 |
| 主键索引 | 它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引,常用于用户ID。类似于书中的页码 |
| 全文索引 | 对于需要全局搜索的数据,进行全文索引 |
注意:以下部分请学习完12.7后再进行学习。
### 普通索引
| 类型 | 详细说明 |
| --- | --- |
| 基本语法 | alter table 表 add index(字段) |
| 示例 | ALTER TABLE `money` ADD INDEX(`username`); |
| 示例解释 | 为money表的username字段增加索引 |
### 唯一索引
| 类型 | 详细说明 |
| --- | --- |
| 基本语法 | alter table 表 add UNIQUE(字段) |
| 示例 | ALTER TABLE `money` ADD UNIQUE(`email`); |
| 示例解释 | 为money表的email字段增加唯一索引 |
### 全文索引
| 类型 | 详细说明 |
| --- | --- |
| 基本语法 | alter table 表 add FULLTEXT(字段) |
| 示例 | ALTER TABLE `money` ADD FULLTEXT(`content`); |
| 示例解释 | 为money表的content字段增加唯一索引 |
### 主键索引
| 类型 | 详细说明 |
| --- | --- |
| 基本语法 | alter table 表 add PRIMARY KEY(字段) |
| 示例 | ALTER TABLE `money` ADD PRIMARY KEY(`id`); |
| 示例解释 | 为money表的id字段增加主键索引 |
### 创建表时也可以声明索引
创建表时可在创建表语句后加上对应的类型即可声明索引:
> PRIMARY KEY(字段)
> INDEX [索引名] (字段)
> FULLTEXT [索引名] (字段)
> UNIQUE[索引名] (字段)
注:中括号中的索引名,代表可选。
整体示例如下:
> CREATE TABLE `test` (
> `id` INT NOT NULL ,
> `username` VARCHAR(20) NOT NULL ,
> `password` INT NOT NULL ,
> `content` INT NOT NULL ,
> PRIMARY KEY (`id`),
> INDEX pw (`password`),
> UNIQUE (`username`),
> FULLTEXT (`content`)
> ) ENGINE = InnoDB;
- 数据库
- CAP定理
- 关系模型
- 关系数据库
- NoSQL
- ODBC
- JDBC
- ODBC、JDBC和四种驱动类型
- mysql
- 安装与配置
- CentOS 7 安装 MySQL
- 优化
- 比较全面的MySQL优化参考
- 1、硬件层相关优化
- 1.1、CPU相关
- 1.2、磁盘I/O相关
- 2、系统层相关优化
- 2.1、文件系统层优化
- 2.2、其他内核参数优化
- 3、MySQL层相关优化
- 3.1、关于版本选择
- 3.2、关于最重要的参数选项调整建议
- 3.3、关于Schema设计规范及SQL使用建议
- 3.4、其他建议
- 后记
- Mysql设计与优化专题
- ER图,数据建模与数据字典
- 数据中设计中的范式与反范式
- 字段类型与合理的选择字段类型
- 表的垂直拆分和水平拆分
- 详解慢查询
- mysql的最佳索引攻略
- 高手详解SQL性能优化十条经验
- 优化SQL查询:如何写出高性能SQL语句
- MySQL索引原理及慢查询优化
- 数据库SQL优化大总结之 百万级数据库优化方案
- 数据库性能优化之SQL语句优化1
- 【重磅干货】看了此文,Oracle SQL优化文章不必再看!
- MySQL 对于千万级的大表要怎么优化?
- MySQL 数据库设计总结
- MYSQL性能优化的最佳20+条经验
- 数据操作
- 数据语句操作类型
- DCL
- 修改Mysql数据库名的5种方法
- DML
- 连接
- 连接2
- DDL
- 数据类型
- 字符集
- 表引擎
- 索引
- MySQL理解索引、添加索引的原则
- mysql建索引的几大原则
- 浅谈mysql的索引设计原则以及常见索引的区别
- 常用工具简介
- QA
- MySQL主机127.0.0.1与localhost区别总结
- 视图(view)
- 触发器
- 自定义函数和存储过程的使用
- 事务(transaction)
- 范式与反范式
- 常用函数
- MySQL 数据类型 详解
- Mysql数据库常用分库和分表方式
- 隔离级别
- 五分钟搞清楚MySQL事务隔离级别
- mysql隔离级别及事务传播
- 事务隔离级别和脏读的快速入门
- 数据库引擎中的隔离级别
- 事务隔离级别
- Innodb中的事务隔离级别和锁的关系
- MySQL 四种事务隔离级的说明
- Innodb锁机制:Next-Key Lock 浅谈
- SQL函数和存储过程的区别
- mongo
- MongoDB设置访问权限、设置用户
- redis
- ORM
- mybatis
- $ vs #
- mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译
- 电商设计
- B2C电子商务系统研发——概述篇
- B2C电子商务系统研发——商品数据模型设计
- B2C电子商务系统研发——商品模块E-R图建模
- B2C电子商务系统研发——商品SKU分析和设计(一)
- B2C电子商务系统研发——商品SKU分析和设计(二)
- 数据库命名规范--通用