什么是索引
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
如何创建索引
索引的创建:
1.-- 创建索引的语法格式
2.-- alter table 表名 add index 索引名[可选](列名, ..)
3.-- 给name字段添加索引
4.alter table classes add index my_name (name);
说明:
索引名不指定,默认使用字段名
索引的删除:
1.-- 删除索引的语法格式
2.-- alter table 表名 drop index 索引名
3.-- 如果不知道索引名,可以查看创表sql语句
4.show create table classes;
5.alter table classes drop index my_name;
3.案例-验证索引查询性能
创建测试表testindex:
1.create table test_index(title varchar(10));
4.向表中插入十万条数据:
验证索引性能操作:
4.联合索引
联合索引又叫复合索引,即一个索引覆盖表中两个或者多个字段,一般用在多个字段一起查询的时候。
索引的类型
索引有三种类型:
1.唯一索引:
唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。
2.主键索引:
数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。
3.聚焦索引:
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。
转载于:https://blog.csdn.net/lh_hebine/article/details/99083048
mysql数据库优化之 如何选择合适的列建立索引
-
在where 从句,group by 从句,order by 从句,on 从句中出现的列;
-
索引字段越小越好;
-
离散度大的列放到联合索引的前面;比如:
select * from payment where staff_id = 2 and customer_id = 236;
针对上面的查询是 index(sftaff_id, customer_id) 好?还是index(customer_id, staff_id)好?
因为customer_id的离散度更大,因此用后面的更合适!!
那么问题来了。怎么判断离散度呢,可以使用 select count(distinct customer_id), count(distinct staff_id) from 表名
谁的值大,说明这一些列的离散度更高!
转载于:https://www.cnblogs.com/slsectyoufromwrold/p/10773783.html