目录
什么是索引?
索引是一种以特定书序保存的专用表。索引并不包含实体中的所有数据,而是用于那些定位表中行的列 ,以及描述这些行的物理位置的信息。
作用
改善查询。大大减少了服务器需要扫描数据量
索引可以帮助服务器避免排序和临时表
索引可以将随机的i/o变为顺序i/o
创建索引
为user 表 username 创建 索引
mysql -》
alter table user add index user_name_index (username);
sql server/oracle-》
create index user_name_index on user(username);
查看索引
mysql-》
show index from user;
这时你会发现有两个索引,这时因为 mysql 自动为主键列生成索引。
删除索引
mysql-》
alter table user drop index user_name_index ;
oracle -》
drop index user_name_index ;
sql server -》
drop index user_name_index on user ;
唯一索引
mysql -》
alter table user add unique index user_name_index (username) ;
唯一索引好处: 限制索引列出现重复,只要操作相关列,数据库服务器都会检查唯一索引以判断该数据是否存在该表某一行。
多列索引
mysql -》
alter table user add unique index user_name_note_index (username,note) ;
为 备注和用户名两列创建索引
索引分类
B树索引 也叫平衡树索引。mysql 、sql server、oracle默认索引都是 B 树索引。
B树索引 擅长处理包含许多不同值的列
位图索引 处理包含少量值却占据大量行(所谓低基数)的列。oracle引入
文本索引 处理数据库中存储的文档
索引的使用
select id from t_user where user_name = 'tom';
当这个sql执行时,服务器首先利用索引快速定位表中的行。如果索引包含满足查询所有内容,那么服务器就不会访问相关表。
索引的不足
并不是索引越多越好
首先要知道,索引十一张表需要磁盘空间。每次当对表做增删改相关操作时索引也相应地被更新,。因此索引越多,服务器需要做的工作也越多。
特殊处理索引
比如在查询前增加索引,修改表之前 先删掉索引。这样就可以减小服务器的开销。
是否必要
当表数据量比较小时,全表扫描更高效。