说起提高数据库性能,索引是最物美价廉的东西了。不用加内存,不用改程序,不用调sql,查询速度就可能提高百倍干倍。
索引本身会占用空间,以空间换时间。索引的代价:磁盘占用,影响DML语句效率(增删改),因为改动后要对索引进行维护,影响速度,但实际应用中,SELECT语句比DML多得多,所以代价可以容忍。
创建索引后,只对创建了索引的列有效。
索引为什么快?创建了一个数据结构,如二叉树、b树、b+树等。
索引有四种:主键、唯一、普通、全文索引
索引的应用场景:
较频繁的作为查询条件字段应该创建索引
唯一性太差的字段不适合单独创建索引
更新非常频繁的字段不适合创建索引
不会出现在WHERE子句中字段不该创建索引
8.1 主键索引primary key
主键自动为主键索引,如果先建表,再指定索引:
ALTER TABLE t26 ADD PRIMARY KEY (id);
8.2 唯一索引unique
unique也自动为唯一索引,如果先建表,再指定索引:
-- 添加唯一索引
CREATE UNIQUE INDEX id_index ON table1 (id);
8.3 普通索引index
用的较多。
如果某列的值,是不会重复的,则优先考虑使用 unique 索引, 否则使用普通索引。
-- 添加普通索引方式 1
CREATE INDEX id_index ON table1 (id);-- 添加普通索引方式 2
ALTER TABLE table1 ADD INDEX id_index (id)
8.4 全文索引fulltext
不好用,实际使用全文搜索solr和ElasticSearch(ES)。
8.5 删除索引
-- 删除索引
DROP INDEX id_index ON t25
-- 删除主键索引
ALTER TABLE t26 DROP PRIMARY KEY
8.6 修改索引
先删除,再添加新索引
8.7 查询索引
-- 1. 方式
SHOW INDEX FROM t25
-- 2. 方式
SHOW INDEXES FROM t25
-- 3. 方式
SHOW KEYS FROM t25
-- 4 方式
DESC t25