一.关于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优化军规


一,核心军规

  1. 不在数据库做计算,cpu计算务必移至业务层
  2. 控制单表数据量,单表记录控制在千万级
  3. 控制列数量,字段数控制在20以内
  4. 平衡范式与冗余,为提高效率可以牺牲范式设计,冗余数据
  5. 拒绝3B(big),大sql,大事务,大批量

二,字段类军规

用好数值类型:

  1. tinyint(1Byte)/smallint(2Byte)/mediumint(3Byte)/int(4Byte)/bigint(8Byte)
    bad case:int(1)/int(11)
  2. 有些字符转化为数字|:用int而不是char(15)存储ip
  3. 优先使用enum或set,例如:sex enum (‘F’, ‘M’)

避免使用NULL字段:

  1. NULL字段很难查询优化
  2. NULL字段的索引需要额外空间
  3. NULL字段的复合索引无效

    bad case:
    name char(32) default null
    age int not null
    good case:
    age int not null default 0

三,索引类军规

  1. 谨慎合理使用索引

  2. 改善查询、减慢更新

  3. 索引一定不是越多越好(能不加就不加,要加的一定得加)

  4. 覆盖记录条数过多不适合建索引,例如“性别”

  5. 字符字段必须建前缀索引

  6. 不在索引做列运算

bad case:

select id where age +1 = 10;
  1. innodb主键合理使用自增列

  2. 主键建立聚簇索引

  3. 主键不应该被修改

  4. 字符串不应该做主键

  5. 如果不指定主键,innodb会使用唯一且非空值索引代替

  6. 不用外键,请由程序保证约束

四,sql类军规

  1. sql语句尽可能简单

  2. 一条sql只能在一个cpu运算

  3. 大语句拆小语句,减少锁时间

  4. 一条大sql可以堵死整个库

  5. 简单的事务

  6. 事务时间尽可能短

bad case:

上传图片事务

避免使用触发器,用户自定义函数,请由程序取而代之

不用select *

消耗cpu,io,内存,带宽

这种程序不具有扩展性

  1. OR改写为IN()

  2. OR改写为UNION

画外音:最新的mysql内核已经进行了相关优化

  1. limit高效分页

  2. limit越大,效率越低

    select id from t limit 10000, 10;

    应该改为 =>

    select id from t where id > 10000 limit 10;

  3. 使用union all替代union,union有去重开销

  4. 尽量不用连接join

  5. 务必请使用“同类型”进行比较,否则可能全表扫面

  6. 打散批量更新

  7. 使用新能分析工具

    show profile;

    mysqlsla;

    mysqldumpslow;

    explain;

    show slow log;

    show processlist;

    show query_response_time(percona)

Mysql索引优化简单介绍的更多相关文章

  1. Mysql 索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  2. mySql索引优化分析

    MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字 ...

  3. MySQL sys Schema 简单介绍-2

    之前在<MySQL sys Schema 简单介绍-1>中简单的介绍了,sys Schema库中的表.那么这些表都可以查询些什么信息呢?接下来本文将做下介绍. 1. 表的情况 1.1 统计 ...

  4. 讲真,MySQL索引优化看这篇文章就够了

    本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引背后的数据结构三部分相关内容,下面一一展开. 一.MySQL——索引基础 首先,我们将从索引基础开始介绍一下什么 ...

  5. 深入浅出Mysql索引优化专题分享|面试怪圈

    文章纲要 该文章结合18张手绘图例,21个SQL经典案例.近10000字,将Mysql索引优化经验予以总结,你可以根据纲要来决定是否继续阅读,完成这篇文章大概需要25-30分钟,相信你的坚持是不负时光 ...

  6. mysql索引优化

    mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间 ...

  7. MySQL索引优化看这篇文章就够了!

    阅读本文大概需要 5 分钟. 来源:cnblogs.com/songwenjie/p/9410009.html 本文主要讨论MySQL索引的部分知识.将会从MySQL索引基础.索引优化实战和数据库索引 ...

  8. 知识点:Mysql 索引优化实战(3)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 索引原理知识回顾 索引的性 ...

  9. MySQL索引优化步骤总结

    在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sq ...

随机推荐

  1. 【Python系统学习03】错误类型整理(一)

    错误类型与可能原因分析 A.语法错误: 1.syntaxError:invalid syntax 无效的语法 print(2019小石头) # print(2019小石头) # ^ # SyntaxE ...

  2. floj 2265 【lxs Contest #141】航海舰队

    首先抠出包围了阵形的最小矩形. 将地图拉伸成一条链,即将第一行.第二行.第三行按顺序连接.阵形也可以用同样的方法处理. 那么问题转化为,给定两个 01 串 S 和 T,问每个 S 中长度为 |T| 的 ...

  3. docker启动报错 (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport

    今天修改完docker宿主机的防火墙文件 vim /etc/sysconfig/iptables 停止容器再启动时 报如下错误 (iptables failed: iptables --wait -t ...

  4. dubbo配置文件解读(1)

    详细的Dubbo配置也可以参考:https://blog.csdn.net/abcde474524573/article/details/53026110 (1)<dubbo:service/& ...

  5. 20191014Java课堂记录

    1. Java字段初始化的规律 首先执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”. 其次执行类的构造函数. 类的初始化块不接收任何的参数,而且只要一创建类的对象,它 ...

  6. 安装xpath helper

    1.下载 版本是:2.02的 链接:https://pan.baidu.com/s/1YdyTbWElL904EMQ-9Ougnw 提取码:bxxa 2.无效安装的解决方案 参考链接:https:// ...

  7. Redis(三):set/get 命令解析

    经过前两篇的介绍,我们对整个redis的动作流程已经有比较清晰的认识. 接下来就是到具体的命令处理方式的理解了,想来我们用这些工具的意义也是在此.虽然没有人觉得,一个set/get方法会有难度,但是我 ...

  8. 对Hadoop分布式文件系统HDFS的操作实践

    原文地址:https://dblab.xmu.edu.cn/blog/290-2/ Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)是Hadoop核 ...

  9. GP工作室—系统设计

    团队作业第二次作业--系统设计 问题 答案 这个作业属于哪个课程 软件工程 这个作业要求在哪里 作业要求 团队名称 GP工作室 这个作业的目标 对项目软件进行更为详细的系统性设计 按照本游戏的设计要求 ...

  10. 最新Pyecharts-基本图表

    Pyecharts是由Echarts而来,Echarts是百度开源的数据可视化的库,适合用来做图表设计开发,当使用Python与Echarts结合时就产生了Pyecharts.可使用pip安装,默认是 ...