索引-MySql

提醒1:主键字段自动添加索引。
提醒2:任何一张表的任何一条记录(一行)再硬盘存储上都有一个硬盘的物理存储编号。
提醒3:索引是一个单独的对象,在不同存储引擎中以不同方式同一形式(B树)存在。
MyISAM中存储在.MYI文件中,InnoDB中存储在tablespace中,MEMEORY存储在内存中。

select * from t_user where id = 101
通过idIndex索引对象定位:101(缩小扫描范围,快速定位),通过101得出物理编号:0x6666,
此时马上进行SQL语句转换:select * from t_user where 物理编号 = 0x6666

索引实现原理:缩小扫描范围,避免全表扫描。

什么条件下会考虑添加索引
1.数据量庞大(测试具体硬件环境)
2.该字段经常出现在where的后面以条件的形式存在,即该字段总是被扫描
3.该字段很少的DML增删改(insert delete update)操作,因为DML后索引需要重新排序会增加开销

索引的创建:create index emp_ename_index on emp(ename);
给emp表的ename字段添加索引,其索引名为emp_ename_index。
索引的删除:drop index emp_ename_index on emp;
将emp表上的emp_ename_index索引对象删除。

如何查看一条SQL语句是否使用了索引进行检索:加explain

索引失效
1.select * from emp where ename like ‘%T’;
即使ename字段有索引,也不会使用,因为模糊匹配中以%开头,不知道第一个字母。
优化手段之:避免模糊查询的时候以%开头(索引优化)。
2.使用or的时候会失效,如果使用or那么要求or两边的条件字段都要有索引才会走索引。
优化手段之:所以不建议使用or。使用union组合查询不会让索引失效(索引优化)。
3.使用复合索引时没有使用左侧的列查找
复合索引:两个或更多字段联合起来添加一个索引。
create index emp_ename_index on emp(ename, job);
不失效:select * from emp where ename = ‘ABCT’;
失效:select * from emp where job = ‘MANAGER’;
4.在where中索引列参加(数学)运算或使用函数。

索引优化是数据库优化的重要手段,
索引类型
索引包括
单一索引/普通索引:一个字段上
组合/复合索引:两个或多个字段上,最前左缀原则
主键索引:主键字段上,不能为空
唯一索引:具有unique约束的字段上,列的值必须唯一且允许空值
短索引/前缀索引:在索引很长的字符列时使用列的前缀代替整个列
聚集索引和非聚集索引
注意:唯一性比较弱、可能存在大量重复数据的字段上添加索引用处不大,越唯一效率越高。

1.添加主键索引(唯一且不为空)
Alter TABLE ‘table_name’ Add Primary key(‘column’);
2.添加唯一索引
Alter TABLE ‘table_name’ Add Unique(‘column’)
3.添加普通索引
Alter TABLE ‘table_name’ Add Index index_name(‘column’)
4.添加全文索引(检索文本信息)
Alter TABLE ‘table_name’ Add FullText(‘column’)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值