mysql优化 (《深入浅出mysql...》笔记)

mysql 查询性能排序,从左至右,性能由最差到最好ALL index range ref eq_ref const/system NULL1.ALL 全表扫描例:select * from user2.index 索引全扫描例:select id from user3.range 索引范围扫描(>、<、>=、<=、=、between等)例:select * from us...
摘要由CSDN通过智能技术生成
mysql 查询性能排序,从左至右,性能由最差到最好
ALL index range ref eq_ref const/system NULL


1.ALL 全表扫描
例:select * from user


2.index 索引全扫描
例:select id from user


3.range 索引范围扫描(>、<、>=、<=、=、between等)
例:select * from user where id >= 5


4.ref 使用非唯一索引扫描,或唯一索引的前缀扫描
例:select * from user where id = 5
join中也常出现ref


5.eq_ref 使用唯一索引(多表连接用主键或unique key作关联条件)
例:select * from teacher a, student b where a.id = b.id


6.const/system 常量
例:select * from(select * from user where id = 1)
备注:临时表中最多有一个匹配行(主键不重复),mysql会当成常量
等于是select * from 常量


7.NULL 不用查就有结果
例:select 1 from user


-------------------------------------------------------------------------------------------
索引在存储引擎层实现,所以每种存储引擎的索引不一定相同,也不一定都互相支持


4种索引:
B-Tree、Hash、R-Tree、Full-text


B-Tree最常见,基本都支持
Hash索引适用于key-value查询,不适用范围查询(<、>、<=、>=),Memory支持
R-Tree空间索引,不常用
Full-Text全文索引,5.6开始支持


如果列名为索引,使用column_name is null 就会使用索引,此处区别oracle


-------------------------------------------------------------------------------------------
索引存在,但不能使用的情况


1. like '%值',(前任意后精确)
例:select * from user where name like '%WAR3'


2.数据类型隐式转换
例:select * from user where id = 1
id是字符型,这里写了数字


3.不满足最左原则匹配
例:alter table warcraftIII add index idx(id,team,race)
添加复合索引idx
select * from warcraftIII where id = 5 可用索引
select * from warcraftIII where id = 5 and team = 'WE' 可用索引
select * from warcraftIII where team = 'MYM' and race = 'HUM' 索引不可用
查id、id,team、id,race、id,team,race、都走索引,但是,查team,race不走


4.mysql估计用索引比全表扫描慢
(mysql内部有个sql优化器)


5.用or时,一个是索引,一个不是
是索引的那列,不会走索引



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值