mysql__索引的设计和使用
索引的设计和使用
1 索引概述
MySIAM和InnoDB存储引擎的表默认创建的都是BTREE索引,MySQL目前不支持函数索引,但是支持前缀索引。还支持全文本索引,但是只有MySIAM(5.0开始)支持FULLTEXT索引,并只限于CHAR、VARCHAR和TEXT列
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tbl_name (index_col_name,...)
index_col_name:col_name [(length)] [ASC|DESC]
删除索引
drop index index_name ON tbl_name
2. 设计索引的原则
1).搜索的索引项,不一定是所要选择的列,换句话说,最适合索引的列是出现在where子句中的列,或者是连接子句中指定的列。
2).使用唯一索引,考虑某列中的值的分布。索引的列的基数越大,索引的效果越好。
3).使用短索引。如果对字符串进行索引,应该指定一个前缀长度,只要有可能就应该这样做。(较小的索引涉及的磁盘IO较少,更为重要的是,对于较短的键值,索引高速缓存中的块能容纳更多的键值)
4).利用最左前缀。在创建一个n列的索引时,实际创建了MySQL可利用的n个索引。多列索引可起几个索引的作用,因为可利用索引最左边的列集来匹配行。
5).不要过度索引。不要以为索引越多越好,每个额外的索引都要占用额外的磁盘空间,并降低写操作的性能。在修改表的内容时,索引必须更新,有时可能需要重构,因此索引越多话费的时间越长。如果一个索引很少利用或从不使用,那么会不必要的减缓表的修改速度。此外,MySQL在生成一个执行计划时,要考虑各个索引,这也需要花费时间。
6).对于InnoDB存储引擎的表,记录默认会按照一定的顺序保存。如果有明确定义的主键,则按照主键的顺序保存。如果没有主键,但是有唯一索引,那么就会按照唯一索引的顺序保存,按照主键或者内部列进行访问时最快的,所以InnoDB表尽量自己指定主键。还需要注意,InnoDB表的普通索引都会保存主键的键值,所以主键要尽可能选择较短的数据类型,可以有地减少索引的磁盘占用,提高索引的缓存效果。
3.BTREE索引与HASH索引
MEMORY存储引擎的表可以选择使用BTREE索引或者HASH索引,两种不同类型的索引各有其不同的适应范围。HASH索引有哪些重要的特征需要在使用的时候特别注意:
1)、只用于使用=或<=>操作符的等是比较
2)、优化器不能使用HASH索引来加速ORDER BY操作
3)、MySQL不能确定在两个值之间大约有多少行,将一个MyISAM表改为HASH索引的MEMORY表,会影响一些查询效率。
4)、只能使用整个关键字来搜索一行
mysql__索引的设计和使用的更多相关文章
- MySQL索引的设计和使用
一.索引可以有效地提升SELECT操作的性能,同时会影响UPDATE.CREATE和DELETE操作的性能.每种引擎对于表的索引有数量和长度的限制. 二.索引的设计原则 (A) 搜索的索引列,不一定是 ...
- Mysql 学习-索引的设计原则
索引的设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍.高效的索引对获的良好性能非常重要.设计索引是,应该考虑一下准则: (1)索引并非语讹夺越好,若一个表中有大量索引,不仅占用磁盘空间,而 ...
- HBase二级索引的设计(案例讲解)
摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...
- MySQL索引的设计、使用和优化
原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根 ...
- HBase二级索引的设计
摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...
- HBase之八--(1):HBase二级索引的设计(案例讲解)
摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowK ...
- MySql(二)索引的设计与使用
MySql(二)索引的设计与使用 一.索引概述 二.设计索引的原则 三.BTREE索引与HASH索引 一.索引概述 所有Mysql列类型都可以被索引,对相关列使用索引时提高select操作性能的最佳途 ...
- SQL语句优化、mysql不走索引的原因、数据库索引的设计原则
SQL语句优化 1 企业SQL优化思路 1.把一个大的不使用索引的SQL语句按照功能进行拆分 2.长的SQL语句无法使用索引,能不能变成2条短的SQL语句让它分别使用上索引. 3.对SQL语句功能的拆 ...
- HBase学习(四) 二级索引 rowkey设计
HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeepe ...
随机推荐
- 003---生成器 & 迭代器
生成器 & 迭代器 列表生成式 现在有个需求,列表[1, 2, 3, 4, 5, 6, 7, 8, 9],将列表里的每个值加1. 二逼青年版 a = [1, 2, 3, 4, 5, 6, 7, ...
- MVC4+EF 列表数据不能绑定
最新准备使用.net 的mvc+Ef来写个项目,开始一切顺利,到了数据绑定时出现了问题. 我的mvc视图引擎是Razor,后台提取数据的是Linq来处理,发现不管怎么样都不能绑定列表数据,可以将后台的 ...
- netty学习记录2
昨天晚上在看到7.2章MessagePack编码器和解码器开发这一章时,书里面没有贴出全部的代码,然后我按照我自己的想法把代码补全后,发现死活没有把代码跑通. 然后花了挺多时间在网上找,很多博客都贴出 ...
- L007- linux系统优化进阶课堂小节
首先把这节课所讲的大概引锁一下,然后下面详细列举. 1.填加普通用户,通过sudo管理. 2.更改默认的SSH服务端口及禁止root用户远程连接. 3.定时自动更新服务器时间 4.关闭防火墙(ipta ...
- 2018春季校园招聘笔经面经合集:Java开发岗
2018春季校园招聘笔经面经合集:Java开发岗 以下为精选面经: 美团外卖配送部后台开发面经 nowcoder.com/discuss/76 春招总结,干货满满 nowcoder.com/discu ...
- Linux用户态程序计时方式详解[转]
转自: http://www.cnblogs.com/clover-toeic/p/3845210.html 前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确 ...
- iOS开发中常见的一些异常
iOS开发中常见的异常包括以下几种NSInvalidArgumentExceptionNSRangeExceptionNSGenericExceptionNSInternallnconsistency ...
- JavaScript序列化对象成URL格式
http://access911.net/fixhtm/72FABF1E15DCEAF3.htm?tt=
- 怎样安装PyCharm
在地址栏输入http://www.jetbrains.com/pycharm/ 打开PyCharm官网 http://idea.lanyus.com/
- (原)UnrealObj篇 : 反射获取Struct类型
@Author: 白袍小道 转载请说明 案例一:蓝图传递任意Struct ,导出struct的相关属性 相关: 1.宏:DECLARE_FUNCTION: 此宏用于在自动生成的样板代码中声明t ...