索引简介
索引是帮助MySQL高效获取数据的数据结构,目的在于提高查询效率
索引类型
普通索引:最基本的索引,没有任何限制,用于加速查询。
创建方法:
a:建表时创建:
CREATE TABLE mytable (name VARCHAR(32), INDEX index_mytable_name(name))
b:建表后创建索引:
CREATE INDEX index_mytable_name ON mytable(name)
c:修改表结构
ALTER TABLE mytable ADD INDEX index_mytable_name(name)
唯一索引:索引的值必须唯一,可以为空值。
创建方法:
a:建表时创建:
CREATE TABLE mytable (name VARCHAR(32), UNIQUE INDEX index_unique_mytable_name(name))
b:建表后创建索引:
CREATE UNIQUE INDEX index_unique_mytable_name ON mytable(name)
c:修改表结构
ALTER TABLE mytable ADD UNIQUE INDEX index_unique_mytable_name(name)
主键索引:一种特殊的唯一索引,不允许有空值。
创建方法:
a:建表时创建:
CREATE TABLE mytable (id INT(11) NOT NULL AUTO_INCREMENT, name VRACHAR(32), PRIMARY KEY (id) )
b:修改表结构
ALTER TABLE mytable.t1 ADD CONSTRAINT t1_pk PRIMARY KEY (id);
组合索引:多个字段上创建索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引遵循最左前缀集合。
创建方法:
a:建表时创建
CREATE TABLE mytable (id INT(11), name VARCHAR(32), INDEX index_mytable_id_name('id','name'))
b:建表后,创建索引
CREATE INDEX index_mytable_id_name ON mytable('id','name')
c:修改表结构
ALERT TABLE mytable ADD INDEX ndex_mytable_id_name (id,name)
全文索引:只要用来查找文本的关键字。
创建方法:
a:建表时创建
CREATE TABLE `article` (`id` int(11) NOT NULL AUTO_INCREMENT ,`title` char(250) NOT NULL ,`contents` text NULL ,`create_at` int(10) NULL DEFAULT NULL ,PRIMARY KEY (`id`),FULLTEXT (contents))
b. 建表后,直接创建索引
CREATE FULLTEXT INDEX index_article_contents ON article(contents);
c. 修改表结构
ALTER TABLE article ADD FULLTEXT INDEX index_article_contents (contents);
索引的优缺点
优点:提高数据检索的效率,降低数据库的IO成本。通过索引列对数据进行排序,降低数据库排序的成本,降低cpu消耗。
缺点:虽然提高了查询效率,但降低更新表的效率