mysql--索引
索引作为一种数据结构,其用途是用于提升检索数据的效率。
分类
普通索引(INDEX):索引列值可重复
唯一索引(UNIQUE):索引列值必须唯一,可以为NULL
主键索引(PRIMARY KEY):索引列值必须唯一,不能为NULL,一个表只能有一个主键索引
全文索引(FULL TEXT):给每个字段创建索引
1.创建索引
1.1 普通索引(INDEX)
1.1.1 在创建表时指定
mysql> create table student1(id int not null, name varchar(100) not null, birthdy date, sex char(1) not null, index nameindex (name(50)));
Query OK, 0 rows affected (0.02 sec)
1.1.2 基于表结构创建
mysql> create table student2(id int not null, name varchar(100) not null, birthday date, sex char(1) not null);
Query OK, 0 rows affected (0.01 sec)mysql> create index nameindex on student2(name(50));
1.1.3 修改表结构创建
mysql> create table student3(id int not null, name varchar(100) not null, birthday date, sex char(1) not null);
Query OK, 0 rows affected (0.01 sec)mysql> ALTER TABLE student3 ADD INDEX nameIndex(name(50));
1.2 唯一索引(UNIQUE)
1.2.1 在创建表时指定
mysql> create table student4(id int not null, name varchar(100) not null, birthday date, sex char(1) not null, unique index id_idex (id));
Query OK, 0 rows affected (0.00 sec)
1.2.2 基于表结构创建
mysql> create table student5(id int not null, name varchar(100) not null, birthday date, sex char(1) not null);
Query OK, 0 rows affected (0.00 sec)mysql> CREATE unique INDEX idIndex ON student5(id);
2. 删除索引
2.1 普通索引(INDEX)
2.1.1 直接删除
mysql> DROP INDEX nameIndex ON student1;
2.1.2 修改表结构删除
mysql> ALTER TABLE student2 DROP INDEX nameIndex;
2.2 唯一索引(UNIQUE)
2.2.1 直接删除
mysql> DROP INDEX idIndex ON student4;
2.2.2 修改表结构删除
mysql> ALTER TABLE student DROP INDEX idIndex;
2.3 查看索引
mysql> SHOW INDEX FROM tab_name;
3.问题:
3.1 导致SQL执行慢的原因:
1.硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。
2.没有索引或者索引失效.
3.数据过多
3.2 索引失效的原因:
运用函数
统计信息不准确:当表中的数据发生大量的插入、更新或者删除操作后,统计信息可能就不再准确
数据分布不均
或(两者都对)
数据类型不匹配
大量的模糊查询
函数的大量使用
注意点:
index(key)每张表可以有很多列做index,必须的起名
索引:当查询速度过慢可以通过建立优化查询速度,可以当作调优