mysql优化整理(索引)
什么是索引?
索引是表记录的单个或多个字段重新组织的一种方法,其目的是提高数据库的查询速度,本质上就是一种数据结构。
索引的类型:primary(主键)、secondary(其他)
索引的数据结构
Innodb primary key

物理文件:

Innodb secondary key

索引的优缺点
- 优点
在大数据前提下,多数情况都会加快查询的速度 - 缺点
每次的数据的更新、删除以及插入操作都需要对索引进行额外的维护,所以需要谨慎的创建索引,创建索引不是万能的,后面会介绍一些简单的技巧
小技巧
- 索引列都有default值
这个的主要问题是,数据库存储的数值存在数据类型转换的问题,如果有默认值,就可以达到快速区别的作用。 - 控制好索引长度
一般情况下,索引的字段只会存储255个字符长度,如果超出这部分之外的,其实作用不是很大,所以创建索引的字段长度最好是255以内的长度。 - 索引列的分组排序
对于创建索引的字段进行分组处理,使用union进行合并 - like语句的优化。
使用like的语句首先可以创建索引,其次尽量避免使用双百分号(%),尽量使用一个%完成,这样可以提升速度。 - 不在索引列上进行运算
不要对字段进行计算后查询(避免将计算写在等号左边,可以换一种写法放在等号右边)。 - 不使用NOT IN和!=操作
对于使用not in或者!=的查询语句,尽量使用in写法。 - 注意隐式转换的问题
和第一条差不多,我们存储的字段类型最好和我们查询语句的字段类型保持一致,这样可以提升访问速度。 - 创建组合索引可以将常用字段放在最左,这样单个查询条件也可以使用索引
再度整理
- 创建合理的索引或者组合索引
- 改写语句,对于没有创建索引的语句,可以使用其他形式转换成具有索引的查询语句
- 链表查询时,最好使用inner形式或者是union合并;另外最好把条件限制到最低,这样符合要求的语句就会更少,查询速度会更快。
- 减少并发量
有时候发现单个执行很快,多个并发执行会有这个问题。 - 缩小查询范围
比如使用in的时候,in里面字段最多不超过20个,limit也需要减少个数。 - 使用主、从库,进行读写分离
- 其他的可能需要检查机器本身的问题了:内存、磁盘等等。
其他
查看是否使用索引方式:可以使用 explain + sql语句,查看所查询的语句是否使用了创建的索引,进而优化自己的索引创建。
- 未创建索引的查询

主要字段说明:select_type(简单查询)、table(表名)、type(索引类型)、prosible_key(可能的索引字段)、key(使用到的索引字段)、key_len(索引字段长度)、rows(查询行数)、Extra(额外信息)
- 创建索引的查询
我这里创建了idx_appid_userid的组合索引,进行查询之后:

我们可以发现之前的字段值发生了变化,可以看出来使用了我们创建的索引,额外信息中也提到使用到了索引条件。
使用上述方式进行优化后,之前整理过的记一次pending请求问题查找过程,有很大的改善,不过这个优化需要一直跟进。
小结
总体的原则就是:尽最大的努力,结合业务情况,减少数据库服务器的I/O,即可大幅度提升服务器的速度。
本文主要参考#高级DBA李丹的分享,再加上一些实战整理而成,由于是初步接触数据库相关的东西,有描述不准确的欢迎指正。另外,如果有其他好的方案也可以推荐给我,不胜感激~
mysql优化整理(索引)的更多相关文章
- mysql 优化之索引的使用
mysql 优化之索引的使用 1:MySQL 索引简介: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL ...
- mysql优化之索引篇
对mysql优化是一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平 ...
- MySQL优化整理
一.SQL优化 1.show status查看各种sql的执行频率 SHOW STATUS 可以根据需要显示 session 级别的统计结果和 global级别的统计结果. 显示当前sessi ...
- mysql优化之索引优化
Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引 ...
- Mysql优化之索引和字段
Mysql优化是一个老生常谈的问题, 优化的方向也优化很多:从架构层;从设计层;从存储层;从SQL语句层; 今天讲解一下从索引和字段: 字段优化: ① 尽量使用TINYINT.SMALLINT.ME ...
- 第九课——MySQL优化之索引和执行计划
一.创建索引需要关注什么? 1.关注基数列唯一键的数量: 比如性别,该列只有男女之分,所以性别列基数是2: 2.关注选择性列唯一键与行数的比值,这个比值范围在0~1之前,值越小越好: 其实,选择性列唯 ...
- mysql优化之索引建立的规则
索引经常使用的数据结构为B+树.结构例如以下 如上图,是一颗b+树,关于b+树的定义能够參见B+树,这里仅仅说一些重点.浅蓝色的块我们称之为一个磁盘块,能够看到每一个磁盘块包括几个数据项(深蓝色所看到 ...
- MySQL优化四 索引优化
索引为什么能提高数据访问性能? 很多人只知道索引能够提高数据库的性能,但并不是特别了解其原理,其实我们可以用一个生活中的示例来理解. 我们让一位不太懂计算机的朋友去图书馆确认一本叫做<MySQL ...
- Mysql优化之索引
前言 这几天抽了个时间将<高性能Mysql>看了一下忽觉索引非常之重要,习之然后总结巩固知识.本文索引使用的是InnoDB存储引擎.因为本文并不是说用索引的好处,所以并不会书写QPS之类的 ...
随机推荐
- android 支持的语言列表(汇总)
Arabic, Egypt (ar_EG) -----------------------------阿拉伯语,埃及Arabic, Israel (ar_IL) ------------------- ...
- C++中将string类型转换为int, float, double类型 主要通过以下几种方式:
C++中将string类型转换为int, float, double类型 主要通过以下几种方式: # 方法一: 使用stringstream stringstream在int或float类型转换为 ...
- 九度OJ 1552座位问题(dp)
刚开始写的一维数组,但是由于后面的数字较大,要对它取模,所以用一维数组进行减法运算,结果就不对了.所以还是得用二维数组,用dp[n][0]来表示第n位为男生总的方法个数,dp[n][1]表示第n位为女 ...
- 数据库 SQL 外键约束 多表查询
多表设计与多表查询 1.外键约束 表是用来保存现实生活中的数据的,而现实生活中数据和数据之间往往具有一定的关系,我们在使用表来存储数据时,可以明确的声明表和表之前的依赖关系,命令数据库来 ...
- MyEclipse修改servlet模版
找到myeclipse安装目录中的 然后把这个jar包复制到桌面 以压缩包的方式打开 之后保存, 然后把修改的这个jar包放到刚开的路径,替换已经存在的! 完成!
- 安装 vs2005, vs2008 报错
最近重新装了系统之后,在安装 vs2005, vs2008 到如下类似的错误,苦苦两天没有解决.不要问为什么是 vs2005,vs2008, 因为原有的项目就是老版本. 无意间在网上看到一句话,大意是 ...
- PLSQL编程基础
一 PL/SQL简介 1 SQL:结构化的查询语句 2 PL/SQL优点与特性: 提高运行效率==>>提高运行效率的其他方式(存储过程,分页,缓存,索引) 模块化设计 允许定义标识符(变量 ...
- DNS负载均衡
1)DNS负载均衡的介绍 对于负载均衡的一个典型应用就是DNS负载均衡.庞大的网络地址和网络域名绝对是负载均衡体现优势的地方.那么它的具体原理是如何的呢?本文就将为大家详细介绍一下相关内容. DNS负 ...
- java 自定义注解以及获得注解的值
1.自定义注解 import java.lang.annotation.*; @Documented @Target(ElementType.FIELD) @Inherited @Retention( ...
- 武汉科技大学ACM :1003: A+B for Input-Output Practice (III)
Problem Description Your task is to Calculate a + b. Input Input contains multiple test cases. Each ...