MySQL索引优化-from 高性能MYSQL

Btree:

1. 尽量使用覆盖索引, 即三星索引

2. 多列索引如果带范围的话, 后续列不会作为筛选条件

3. 多列索引应选择过滤性更好的充当前缀索引

4. 尽量按主键顺序插入, 减少页分裂, 采用自增ID在高并发情况下, 可能造成明显征用, 或者更改innodb_autoinc_lock_mode配置.

Hash:

1.只有精确匹配所有列的查询才有效, 对于每行数据, 引擎都会对所有索引列计算hash码

2. 只有memory才可以支持hash索引, innodb支持自适应hash索引, 但是不受人为控制, 是innodb的内部优化, 他会在内存中基于Btree在建立一个hash索引

3. hash索引结构十分紧凑, 查询速度快, 但是也有限制:1.只包含hash值和指针2.hash索引不是排序的3.hash索引不支持部分索引列匹配4. 不支持范围查询5.访问速度快, 除非有hash冲突6. 不适合对选择性很低的列上建立索引, 冲突越多, 代价越大

4. 在innoDB上创建自定义hash索引, 思路: 在Btree上创建伪hash索引, 例如要保持大量url, 根据url进行查询, 如果使用btree, 存储内容会很大, 增加一个url_crc列, 使用CRC32进行hash, 查询的时候使用select id from url where url=CRC32("http://sdad.com"); 这样做性能非常高, 维护hash索引值可以手动维护, 也可用触发器, 不能采用SHA1或者MD5作为hash函数, 因为这两个函数的计算hash值非常大, 浪费空间, 消除冲突在这里不是最高要求,  出现hash冲突, 可采用select id from url where url_crc=CRC32("http://sadsa") AND url = "hhtp://asdad.com", 也可使用FNV64()作为hash函数, 冲突小很多

Explain:

1. Using union 说明索引应该合并

2. using index 说明是覆盖索引, 赞

3. using where 说明索引未完全覆盖, 或者是使用like查询

4. using where, using index

MySQL索引优化-from 高性能MYSQL,布布扣,bubuko.com

时间: 2024-10-07 06:13:45

MySQL索引优化-from 高性能MYSQL的相关文章

Mysql 索引优化分析

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

mySql索引优化分析

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

mysql索引优化

mysql 索引优化 >mysql一次查询只能使用一个索引.如果要对多个字段使用索引,建立复合索引. >越小的数据类型通常更好:越小的数据类型通常在磁盘.内存和CPU缓存中都需要更少的空间,处理起来更快. >简单的数据类型更好:整型数据比起字符,处理开销更小,因为字符串的比较更复杂.在MySQL中,应该用内置的日期和时间数据类型,而不是用字符串来存储时间:以及用整型数据类型存储IP地址. >尽量避免NULL:应该指定列为NOT NULL,除非你想存储NULL.在MySQL中,含有空

索引优化来实现MySQL的ORDER BY语句优化

MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结操作时匹配其它表的数据行的搜索速度. MySQL也能利用索引来快速地执行ORDER BY和GROUP BY语句的排序和分组操作. 通过索引优化来实现MySQL的ORDER BY语句优化: 1.ORDER BY的索引优化.如果一个SQL语句形如: SELECT [column1],[column2],-. FROM [TABLE] ORDER BY [sort]; 在[sort]这个栏位上建立索引就可以实现利用索引进行order

【转载】MySQL索引优化

MySQL索引优化 原文链接 MySQL官方对索引的定义:索引是帮助MySQL高效获取数据的数据结构.索引是在存储引擎中实现的,所以每种存储引擎中的索引都不一样.如MYISAM和InnoDB存储引擎只支持BTree索引:MEMORY和HEAP储存引擎可以支持HASH和BTREE索引. 这里仅针对常用的InnoDB存储引擎所支持的BTree索引进行介绍: 一.索引类型 先创建一个新表,用于演示索引类型 CREATE TABLE index_table ( id BIGINT NOT NULL au

MySQL索引优化步骤总结

在项目使用mysql过程中,随着系统的运行,发现一些慢查询,在这里总结一下mysql索引优化步骤 1.开发过程优化 开发过程中对业务表中查询sql分析sql执行计划(尤其是业务流水表),主要是查看sql执行计划,对sql进行优化. explain执行计划关键属性 select_type,possible_keys,key,rows (1) select_type 访问类型 system>const > eq_ref > ref > fulltext > ref_or_null

数据库优化(二)—— MySQL索引优化

目录 MySQL的索引优化 一.MySQL 5.7的初始化配置 二.MySQL配置文件 1.配置 2.配置文件作用 三.多实例 1.创建相关的目录 2.创建实例的配置文件 3.初始化 4.授权 5.启动实例 6.查看启动状况 7.测试 8.配置启动脚本 9.开机自启 10.设定mysql密码 11.忘记密码 四.数据类型 1.整型 2.字符串类型 3.时间类型 规范 五.索引 1.索引作用 2.索引种类 3.Btree 分类 4.聚集索引和辅助索引的对比 六.MySQL索引管理 1.创建索引(辅

MySQL索引类型一览 让MySQL高效运行起来

索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  );   我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录

MySQL索引类型一览 让MySQL高效运行起来(转)

转自:http://www.php100.com/html/webkaifa/database/Mysql/2010/0409/4279.html 索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NUL