一.关于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. 【转】Eclipse快捷键指南

    目录 1 编辑 2 查看 3 窗口 4 导航 5 搜索 6 文本编辑 7 文件 8 项目 9 源代码 10 运行 11 重构 12 修改快捷键 Eclipse快捷键,熟悉快捷键可以帮助开发事半功倍,节 ...

  2. OOP之重载

    PHP中的重载指的是动态的创建属性与方法,是通过魔术方法来实现的. 属性的重载通过调用类中的__set,__get,__isset,__unset方法来分别实现对不存在属性的赋值.读取.判断属性是否设 ...

  3. NOIP提高组2018试题解析 Day1 T1 铺设道路 P5019

    题目描述 春春是一名道路工程师,负责铺设一条长度为 nn 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 nn 块首尾相连的区域,一开始,第 ii 块区域下陷的深度为 d_idi​  ...

  4. cogs 1176. [郑州101中学] 月考 Map做法

    1176. [郑州101中学] 月考 ★★☆   输入文件:mtest.in   输出文件:mtest.out   简单对比时间限制:1 s   内存限制:128 MB [题目描述] 在上次的月考中B ...

  5. 我与Git的那些破事系列(下)--分支模型

    在上篇文章中,我提到了Git的基本概念和一些本人实际项目中的总结.然而,最近读了一片Vincent Driessen写的一篇文章,觉得他总结的太好了,忍不住站在他的肩膀上写一篇自己的理解.文章的连接放 ...

  6. kubernetes concepts -- Pod Overview

    This page provides an overview of Pod, the smallest deployable object in the Kubernetes object model ...

  7. 关于爬虫的日常复习(14)—— 爬虫beautifulsoup的初级高级的基本用法

  8. pandas DF去重

    实例 import pandas as pd data=pd.DataFrame({'产品':['A','A','A','A'],'数量':[50,50,30,30]}) 去重 data.drop_d ...

  9. LeetCode 858 镜面反射

    题目 有一个特殊的正方形房间,每面墙上都有一面镜子.除西南角以外,每个角落都放有一个接受器,编号为 0, 1,以及 2. 正方形房间的墙壁长度为 p,一束激光从西南角射出,首先会与东墙相遇,入射点到接 ...

  10. 1. RevitAPI 基础(上)

    一 重要的基本设置: 1. 类库:revitAPI.DLL, revitAPIUI.DLL,个人理解前者包括了revit软件所特有的数据类型及软件中存在的全部后台数据,而后者是包含了大量与实现UI交互 ...