标签:
索引即数据库通过一定的组织方式(B-tree等)把创建索引列上数值和位置存储已达到快速查询的目的。
(1) 主键索引,一张表指定主键,自动创建索引。
(2) 唯一性索引,列值不能相同,但相对于主键索引可以为空。
(3) FULLTEXT 是全文索引,用于搜索长文本.
(4) 普通索引 没有以上限制
有个别人举得很好的例子:
这个系统有一个会员表
有下列字段:
会员编号 INT
会员姓名 VARCHAR(10)
会员身份证号码 VARCHAR(18)
会员电话 VARCHAR(10)
会员住址 VARCHAR(50)
会员备注信息 TEXT
那么这个 会员编号,作为主键,使用 PRIMARY
会员姓名 如果要建索引的话,那么就是普通的 INDEX
会员身份证号码 如果要建索引的话,那么可以选择 UNIQUE (唯一的,不允许重复)
会员备注信息 , 如果需要建索引的话,可以选择 FULLTEXT,全文搜索。
不过 FULLTEXT 用于在长文本建立索引效果最好,用在比较短的文本,普通的 INDEX 就可以了。
mysql> desc card_info;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| number | int(8) | NO | PRI | NULL | |
| name | varchar(10) | NO | | NULL | |
| phone | int(11) | YES | | NULL | |
| id | int(18) | NO | UNI | NULL | |
| info | text | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
1. 主键索引指定主键时,已经默认创建,id也会产生一个unique索引
mysql> show index from card_info;
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| card_info | 0 | PRIMARY | 1 | number | A | 0 | NULL | NULL | | BTREE | | |
| card_info | 0 | id | 1 | id | A | 0 | NULL | NULL | YES | BTREE | | |
+-----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
2. 创建一个普通索引
create index index_name on card_info(name);
mysql> show index from card_info;
+-----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| card_info | 0 | PRIMARY | 1 | number | A | 0 | NULL | NULL | | BTREE | | |
| card_info | 0 | id | 1 | id | A | 0 | NULL | NULL | YES | BTREE | | |
| card_info | 1 | index_name | 1 | name | A | 0 | NULL | NULL | | BTREE | | |
+-----------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)
3. 创建fulltext索引
alter table card_info add fulltext index index_info(info)
4. 删除索引
5. mysql> alter table card_info drop index index_name;
6. 创建联合索引
create index name_phone on card_info(name,phone);
NOT IN和<>操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替,id<>3则可使用id>3 or id<3来代替。
标签:
原文地址:http://www.cnblogs.com/zgzhang/p/4332025.html