Mysql索引优化简单介绍
一.关于MySQL联合索引
- 总结记录一下关于在MySQL中使用联合索引的注意事项.
- 如:索引包含表中每一行的last_name、first_name和dob列,即key(last_name, first_name, dob)。
- 以下情况可以用到索引:
- (1)匹配全值:对索引中的所有列都指定具体的值。
- (2)匹配最左前缀:你可以利用索引查找last name为Allen的人,仅仅使用索引中的第1列。
- (3)匹配列前缀:你可以利用索引查找last name以J开始的人,这仅仅使用索引中的第1列。
- (4)匹配值的范围查询:可以利用索引查找last name在Allen和Barrymore之间的人,仅仅使用索引中第1列。
- (5)匹配部分精确而其它部分进行范围匹配:可以利用索引查找last name为Allen,而first name以字母K开始的人。
- (6)仅对索引进行查询:如果查询的列都位于索引中,则不需要读取元组的值。
- 由于B-树中的节点都是顺序存储的,所以可以利用索引进行查找(找某些值),也可以对查询结果进行ORDER BY。当然,使用B-tree索引有以下一些限制:
- (1)查询必须从索引的最左边的列开始。关于这点已经提了很多遍了。例如你不能利用索引查找在某一天出生的人。
- (2)不能跳过某一索引列。例如,你不能利用索引查找last name为Smith且出生于某一天的人。
- (3)存储引擎不能使用索引中范围条件右边的列。例如,如果你的查询语句为WHERE last_name="Smith" AND first_name LIKE 'J%' AND dob='1976-12-23',则该查询只会使用索引中的前两列,因为LIKE是范围查询。
二.mysql优化军规
一,核心军规
- 不在数据库做计算,cpu计算务必移至业务层
- 控制单表数据量,单表记录控制在千万级
- 控制列数量,字段数控制在20以内
- 平衡范式与冗余,为提高效率可以牺牲范式设计,冗余数据
- 拒绝3B(big),大sql,大事务,大批量
二,字段类军规
用好数值类型:
- tinyint(1Byte)/smallint(2Byte)/mediumint(3Byte)/int(4Byte)/bigint(8Byte)
bad case:int(1)/int(11) - 有些字符转化为数字|:用int而不是char(15)存储ip
- 优先使用enum或set,例如:
sexenum (‘F’, ‘M’)
避免使用NULL字段:
- NULL字段很难查询优化
- NULL字段的索引需要额外空间
NULL字段的复合索引无效
bad case:
namechar(32) default null
ageint not null
good case:
ageint not null default 0
三,索引类军规
谨慎合理使用索引
改善查询、减慢更新
索引一定不是越多越好(能不加就不加,要加的一定得加)
覆盖记录条数过多不适合建索引,例如“性别”
字符字段必须建前缀索引
不在索引做列运算
bad case:
select id where age +1 = 10;
innodb主键合理使用自增列
主键建立聚簇索引
主键不应该被修改
字符串不应该做主键
如果不指定主键,innodb会使用唯一且非空值索引代替
不用外键,请由程序保证约束
四,sql类军规
sql语句尽可能简单
一条sql只能在一个cpu运算
大语句拆小语句,减少锁时间
一条大sql可以堵死整个库
简单的事务
事务时间尽可能短
bad case:
上传图片事务
避免使用触发器,用户自定义函数,请由程序取而代之
不用select *
消耗cpu,io,内存,带宽
这种程序不具有扩展性
OR改写为IN()
OR改写为UNION
画外音:最新的mysql内核已经进行了相关优化
limit高效分页
limit越大,效率越低
select id from t limit 10000, 10;
应该改为 =>
select id from t where id > 10000 limit 10;
使用union all替代union,union有去重开销
尽量不用连接join
务必请使用“同类型”进行比较,否则可能全表扫面
打散批量更新
使用新能分析工具
show profile;
mysqlsla;
mysqldumpslow;
explain;
show slow log;
show processlist;
show query_response_time(percona)
Mysql索引优化简单介绍的更多相关文章
- Mysql 索引优化分析
MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...
- mySql索引优化分析
MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...
- MySQL sys Schema 简单介绍-2
之前在<MySQL sys Schema 简单介绍-1>中简单的介绍了,sys Schema库中的表.那么这些表都可以查询些什么信息呢?接下来本文将做下介绍. 1. 表的情况 1.1 统计 ...
- 讲真,MySQL索引优化看这篇文章就够了
本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...
- 深入浅出Mysql索引优化专题分享|面试怪圈
文章纲要 该文章结合18张手绘图例,21个SQL经典案例.近10000字,将Mysql索引优化经验予以总结,你可以根据纲要来决定是否继续阅读,完成这篇文章大概需要25-30分钟,相信你的坚持是不负时光 ...
- mysql索引优化
mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间 ...
- MySQL索引优化看这篇文章就够了!
阅读本文大概需要 5 分钟. 来源:cnblogs.com/songwenjie/p/9410009.html 本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引 ...
- 知识点:Mysql 索引优化实战(3)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...
- MySQL索引优化步骤总结
在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...
随机推荐
- html 鼠标指针讲解
html 鼠标指针 详情可以看https://www.w3school.com.cn/tiy/t.asp?f=csse_cursor 测试代码: <html> <body> & ...
- (2)MongoDB副本集自动故障转移原理
前文我们搭建MongoDB三成员副本集,了解集群基本特性,今天我们围绕下图聊一聊背后的细节. 默认搭建的replica set均在主节点读写,辅助节点冗余部署,形成高可用和备份, 具备自动故障转移的能 ...
- 小程序中组件公用属性和data-的使用
属性名 类型 描述 注解 hidden Boo ...
- github 删除库
1.查看库 2.选择想要删除的库,点击setting 3.删除库
- NSCTF-Reverse02 超级详细且简单的办法搞定
没有壳 VC写的 观察界面 一个编辑框 一个按钮 拖进IDA 在导入表里找到GetDlgItemTextA 为什么找这个函数 因为这个函数的作用就是 获取我们输入编辑框的内容 双击进入 ctrl+X ...
- springboot中使用logback
原文地址:https://blog.csdn.net/tianyaleixiaowu/article/details/73321610 Springboot默认集成的就是logback,logback ...
- Excel.Application class
https://docs.microsoft.com/en-us/javascript/api/excel/excel.application?view=office-js Represents th ...
- KALI美化-设置CONKY开机启动
简介 Conky 是一个应用于桌面环境的系统监视软件,可以在桌面上监控系统运行状态.网络状态等一系列参数 https://github.com/brndnmtthws/conky/ 详细配置文档:ht ...
- BOZJ-2590 优惠券
BOZJ-2590 优惠券 题目: 约翰需要买更多的奶牛!交易市场上有n头奶牛等待出售,第ii头奶牛的原价是\(p_i\)元,使用优惠券之后,折扣价为\(c_i\)元.约翰有m元钱和k张优惠券.请问约 ...
- 优雅写Java之一(常见编程技巧)
一.字符串相关 推荐使用Apache Commons Lang3库 创建Empty字符串:return StringUtils.EMPTY; 或者 return ""; 创建重复的 ...