索引
索引 |
一、简介
索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。
- 索引优化应该是对查询性能优化最有效的手段了;
- 索引能够轻易将查询性能提高好几个数量级;
- 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。
索引特点:创建与维护索引会消耗很多时间与磁盘空间,但查询速度大大提高!
二、语法
#方法一:创建表时 CREATE TABLE 表名 ( 字段名1 数据类型 [完整性约束条件…], 字段名2 数据类型 [完整性约束条件…], [UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY [索引名] (字段名[(长度)] [ASC |DESC]) ); #------------------------- #创建普通索引示例: CREATE TABLE emp1 ( id INT, name VARCHAR(30) , resume VARCHAR(50), INDEX index_emp_name (name) --KEY index_dept_name (dept_name) ); #创建唯一索引示例: CREATE TABLE emp2 ( id INT, name VARCHAR(30) , bank_num CHAR(18) UNIQUE , resume VARCHAR(50), UNIQUE INDEX index_emp_name (name) ); #创建全文索引示例: CREATE TABLE emp3 ( id INT, name VARCHAR(30) , resume VARCHAR(50), FULLTEXT INDEX index_resume (resume) ); #创建多列索引示例: CREATE TABLE emp4 ( id INT, name VARCHAR(30) , resume VARCHAR(50), INDEX index_name_resume (name, resume) ); #------------------------------------- #方法二:CREATE在已存在的表上创建索引 CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(长度)] [ASC |DESC]) ; CREATE INDEX index_emp_name on emp1(name); #方法三:ALTER TABLE在已存在的表上创建索引 ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ; ALTER TABLE emp2 ADD UNIQUE INDEX index_bank_num(band_num); #删除索引:DROP INDEX 索引名 ON 表名字; DROP INDEX index_emp_name on emp1;
三、测试索引
#创建表 create table t1(id int,name varchar(20)); #存储过程 delimiter $$ #声明存储过程的结束符合为$$ create procedure autoinsert() BEGIN declare i int default 1; while(i<500000)do insert into t1 values(i,'alex'); set i=i+1; end while; END$$ #$$结束 delimiter ; #重新声明分号为结束符合 #调用函数 call autoinsert(); #花费时间比较: #创建索引前 select * from Indexdb.t1 where id=300000;--0.32s #添加索引 create index index_id on Indexdb.t1(id); #创建索引后 select * from Indexdb.t1 where id=300000;--0.00s