mysql新版本索引优化简介

索引创建优化:
fast index creation
mysql5.5之前不包括5.5,创建索引或修改删除这类的ddl操作过程为:
1、首先创建一张新的临时表,表结构为通过alter table 新定义的结构
2、然后把原表中的数据导入到临时表中
3、接着删除原表
4、最后把临时表重命名为原来的表名

innodb 存储引擎从1.0.x开始支持fast index creation(快速索引创建)-简称:FIC
对于辅助索引的创建,innodb存储引擎会对创建索引的表加上一个S锁,在创建过程中,不需要重建表,速度快了很多,删除辅助索引也会快很多,

存在的问题:
(1)在创建过程中只能对该表进行读操作,若有大量的事物需要对目标表进行写操作,数据库服务器不可用。
(2)FIC方式只限于辅助索引,对于主键的创建与删除同样需要重建一张表

online ddl
虽然FIC可以让innodb存储引擎避免创建临时表,从而提高了索引的创建效率,但是会阻塞DDL操作,从mysql5.6开始支持了online DDL(在线数据定义)操作,
其允许辅助索引创建的同时,还允许其他诸如insert,update,delete这类的DDL操作,此外一下这几类DDL操作都可以通过“在线”的方式进行操作:
(1)辅助索引的创建与删除
(2)改变自增长值
(3)添加删除外键约束
(4)列的重命名

时间: 2024-10-11 13:13:51

mysql新版本索引优化简介的相关文章

mysql hash索引优化

创建表 CREATE TABLE `t1` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `msg` varchar(20) NOT NULL DEFAULT '',  `crcmsg` int(15) NOT NULL DEFAULT '0',  PRIMARY KEY (`id`)) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 //插入数据 insert into t1 (msg) values

MySQL的索引优化,查询优化

MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的功能也在这一层实现:存储过程.触发器.视图等.

mysql使用索引优化查询效率

索引的概念 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度.在没有索引的情况下,数据库会遍历全部数据后选择符合条件的:而有了相应的索引之后,数据库会直接在索引中查找符合条件的选项.如果我们把SQL语句换成"SELECT * FROM 表名 WHERE id=2000000",那么你是希望数据库按照顺序读取完200万行数据以后给你结果还是直接在索引中定位

mysql使用索引优化order排序

个人原创地址:http://www.phpthinking.com/archives/433 在数据库中我们一般都会对一些字段进行索引操作,这样可以提升数据的查询速度,同时提高数据库的性能像order by ,group by前都需要索引. 先我们要注意一下1>mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引.2>在ORDER BY操作中,MySQL只有在排序条件不是一个查询条件表达式的情况下才使用索引.关于索引一些说法 MySQL索引通常是被用于提高WHERE条件的

MySQL之索引优化

很多数据库系统性能不理想是因为系统没有经过整体优化,存在大量性能低下的SQL 语句.这类SQL语句性能不好的首要原因是缺乏高效的索引.没有索引除了导致语句本身运行速度慢外,更是导致大量的磁盘读写操作,使得整个系统性能都受之影响而变差. 解决这类系统的首要办法是优化这些没有索引或索引不够好的SQL语句. 1.创建索引的关键优化SQL语句的关键是尽可能减少语句的logical reads.这里说的logical reads是指语句执行时需要访问的单位为8K的数据页总数.logical reads 越

MySql在索引优化

1.复合索引比如有一条语句是这样的:select * from users where area='beijing' and age=22;如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area.age两列上创建复合索引的话将带来更高的效率.如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了(area,age,salary).(area,age).(are

MySQL添加索引优化SQL

在慢查询日志中有一条慢SQL,执行时间约为3秒 mysql> SELECT     -> t.total_meeting_num,     -> r.voip_user_num     -> FROM     -> (     -> SELECT     -> count(*) total_meeting_num     -> FROM     -> Conference     -> WHERE     -> isStart = 1   

MySQL高级-索引优化

索引失效 1. 2.最佳左前缀法则 4. 8. 使用覆盖索引解决这个问题.

Mysql 索引优化分析

MySQL索引优化分析 为什么你写的sql查询慢?为什么你建的索引常失效?通过本章内容,你将学会MySQL性能下降的原因,索引的简介,索引创建的原则,explain命令的使用,以及explain输出字段的意义.助你了解索引,分析索引,使用索引,从而写出更高性能的sql语句.还在等啥子?撸起袖子就是干! 案例分析 我们先简单了解一下非关系型数据库和关系型数据库的区别. MongoDB是NoSQL中的一种.NoSQL的全称是Not only SQL,非关系型数据库.它的特点是性能高,扩张性强,模式灵