列或多列的值进行排序的一种结构,是某个表中一列或多列值得集合和相应的指针向表中物理标识这些值得数据页的逻辑指针清单。 创建索引可以大大提高
系统性能,若果没有索引,执行查询是mysql必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录,表里面记录越多,这个操作的代价就越高。但如果作为搜索条件的列上已经创建了索引,mysql无需扫描任何记录即可迅速地得到目标记录所在位置。 创建索引语法为: create [unicode | fulltext | spatial] index index_name [using index_type] on tbl_name (index_col_name, ...) mysql提供以下几种索引类型选择:普通索引(create index)、唯一性索引(create unique index)、主键(primary key)、全文索引(fulltext)。其中普通索引、唯一性索引和主键也可以在创建或修改表时指定。 以唯一性索引为例,直接创建唯一索引语法如下:
mysql> select * from tb_users;
+--------+----------+------------+------------+
| userid | username | birth | last_login |
+--------+----------+------------+------------+
| 10000 | Allen | 1981-01-01 | 2014-02-02 |
| 10001 | Ben | 1982-04-02 | 2014-04-30 |
| 10002 | Curry | 1985-08-12 | 2014-01-17 |
| 10003 | Davis | 1978-07-12 | 2014-09-20 |
| 10004 | Ellis | 1979-09-02 | 2015-02-10 |
| 10005 | Faried | 1984-02-05 | 2014-12-01 |
| 10007 | Hamilton | 1988-07-07 | 2014-11-16 |
| 10008 | Johnson | 1986-06-07 | 2015-01-23 |
| 10009 | Jackson | 1989-08-17 | 2013-12-23 |
| 10010 | James | 1984-12-30 | 2014-12-23 |
| 10011 | Gay | 1987-02-03 | 2014-12-23 |
| 10012 | Kaman | 1981-04-04 | 2010-01-13 |
| 10006 | Wade | 1982-03-04 | 2012-05-19 |
+--------+----------+------------+------------+
13 rows in set (0.00 sec)
mysql> create unique index idx_name on tb_users(username(5));
Query OK, 13 rows affected (0.13 sec)
Records: 13 Duplicates: 0 Warnings: 0
mysql>
主键是一种特殊的唯一索引,不允许有空值,一般在创建表时同时创建主键索引。一个表只能有一个主键。
一般来说应该在这些列上创建索引: 经常需要搜索的列(加快搜索速度)、经常用于连接的列(加快连接速度)、经常需要根据范围进行搜索的列、经常需要排序的列、经常使用在where子句中的列上。