一、mysql 索引
1、索引快速入门
因为现在使用的mysql默认存储引擎是Innodb,所以本篇文章重点讲述Innodb下的索引
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
对于海量数据库,查询消耗大量的代价,为某列创建索引,会节省大量的时间--形成了一个索引数据结构,比如二叉树索引
2、索引的类型
1、主键索引:主键自动的为主索引(primary key)
2、唯一索引(unique)
3、普通索引(index)
4、全文索引(fulltext)---适用于MyISAM
一般开发,不使用mysql自带的全文索引,二十使用:全文搜索Solr和ElasticSearch
CREATE TABLE t1
(id INT PRIMARY KEY, ---主键,同时也是索引,成为主键索引
`name` VARCHAR(32),
email VARCHAR(255) UNIQUE ---email时唯一的,同时也是索引,称为UNIQUE索引
3、索引使用
-- 创建索引
CREATE TABLE t25 (
id INT ,
`name` VARCHAR(32));
-- 查询表是否有索引
SHOW INDEXES FROM t25;
--如果某列的值,是不会重复的,则优先考虑使用 unique 索引, 否则使用普通索引
-- 添加唯一索引
CREATE UNIQUE INDEX id_index ON t25 (id);
-- 添加普通索引方式 1
CREATE INDEX id_index ON t25 (id);
-- 添加普通索引方式 2
ALTER TABLE t25 ADD INDEX id_index (id)
-- 添加主键索引
CREATE TABLE t26 (
id INT ,
`name` VARCHAR(32));
ALTER TABLE t26 ADD PRIMARY KEY (id)
-- 删除索引
DROP INDEX id_index ON t25
-- 删除主键索引
ALTER TABLE t26 DROP PRIMARY KEY
4、索引小结
1、比较繁琐的作为查询条件字段应该创建索引
SELECT *FROM emp WHERE empno = 1
2、唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
SELECT *FROM emp WHERE sex= '男'
3、更新非常频繁的字段不适合创建索引
SELECT *FROM emp WHERE logincount = 1
4、不会出现在WHERE子句中字段不该创建索引
5、需要join连表的字段、需要排序的字段、需要group by的字段