mysql 索引详细介绍
mysql 索引详解:
在mysql 中,索引可以分为两种类型 hash索引和 btree索引。
什么情况下可以用到B树索引?
1.全值匹配索引
比如:
orderID="123”
2.匹配最左前缀索引查询
比如:在userid 和 date字段上创建联合索引。
那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引。
3.匹配列前缀查询
比如: order_sn like ‘134%' 这样可以使用到索引。
4.匹配范围值查询
createTime>'2015-01-09' and createTime<'2015-01-10'
5.精确匹配左前列并范围匹配另外一列
比如:
userId=1 and createTime>'2016-9-18'
6.只访问索引的查询,称为覆盖索引,及索引包括查询列的数据。
BTREE索引的限制
1.如果不是按照索引的最左列开始查找,则无法使用索引。
比如创建联合索引:
orderId ,createTime 字段创建联合索引,如果只是输入 createTIme的条件,没有orderid的条件,那么将不能使用此索引。
2.使用索引时不能跳过索引的列。
三列:
日期,姓名,电话 组成列和索引,如果查询时 只输入 日期 和电话,那么只能使用日期作为索引进行过滤。
3.NOT IN 和 <> 操作无法使用索引。
4.如果查询中有某个列的范围查询,则其右边所有列都无法使用索引。
hash 索引的特点
hash索引是基于hash表实现的,只有查询条件精确匹配hash 索引中的所有列时,才能使用hash索引。只能是等值查询。
对于hash索引中的所有列,存储引擎都会为每一行计算一个hash码,hash索引中存储的就是hash码。
限制:
1.必须两次读取,先读取hash 找到对应的行,再读取对应的行数据。
2.hash索引无法用于排序。
3.只支持精确查找,不支持部分索引查找,也不支持范围查找。
hash冲突:
hash 索引不能使用于选择性很差的字段,而要用在比如 选择性强的列上创建hash索引。
比如:不要在性别字段上创建hash索引。
为什么要使用索引?
1.索引大大减少存储引擎需要扫描的数据量。索引小于数据大小。
2.索引可以帮助我们进行排序以避免使用临时表。索引是有顺序的。
3.索引可以把随机的I/0 变为 顺序的IO
索引是不是越多越好?
1.索引会增加写操作的成本
2.太多的索引会增加查询优化器和选择时间。
建立索引的策略
1.索引列上不能使用表达式或函数
比如:
select * from product where to_days(out_date) –to_days(current_date)<=30,out_date为索引列。
改成:
select* from product where out_date<date_add(current_date,interval 30 day)
2.索引大小不能超过一定值。
inodb 索引列 大小为 200个长度。
3.前缀和索引列的选择性。
create index idx_NAME on table (account);
4.联合索引
如何选择索引列的顺序。
1.经常会被索引的列。
2.选择性高的里的列的优先。
3.对小的列创建索引。
感谢阅读此文,希望能帮助到大家,谢谢大家对本站的支持!
相关推荐
-
Mysql数据库之索引优化
MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如"精通MySQL"."SQL语句优化"."了解数据库原理"等要求.我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,
-
MySQL索引用法实例分析
本文实例分析了MySQL索引用法.分享给大家供大家参考,具体如下: MYSQL描述: 一个文章库,里面有两个表:category和article.category里面有10条分类数据.article里面有20万条.article里面有一个"article_category"字段是与category里的"category_id"字段相对应的.article表里面已经把 article_category字义为了索引.数据库大小为1.3G. 问题描述: 执行一个很普通的查
-
详解mysql建立索引的使用办法及优缺点分析
前言 索引(index)是帮助MySQL高效获取数据的数据结构. 它对于高性能非常关键,但人们通常会忘记或误解它. 索引在数据越大的时候越重要.规模小.负载轻的数据库即使没有索引,也能有好的性能, 但是当数据增加的时候,性能就会下降很快. 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能. 第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性. 第二.可以大大加快数据的检索速度,这也是创建索引的最主要的原因. 第三.可以加速表和表之间的连接,特别是在实现数据的参考完整性方
-
Mysql性能优化案例 - 覆盖索引分享
场景 产品中有一张图片表,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化 表结构很简单,主要字段: 复制代码 代码如下: user_id 用户ID picname 图片名称 smallimg 小图名称 一个用户会有多条图片记录 现在有一个根据user_id建立的索引:uid 查询语句也很简单:取得某用户的图片集合 复制代码 代码如下: select picname, smallimg from pics where user_id = xxx; 优化前 执行查
-
Mysql判断表字段或索引是否存在
判断字段是否存在: DROP PROCEDURE IF EXISTS schema_change; DELIMITER // CREATE PROCEDURE schema_change() BEGIN DECLARE CurrentDatabase VARCHAR(); SELECT DATABASE() INTO CurrentDatabase; IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schem
-
mysql索引必须了解的几个重要问题
本文讲述了mysql索引必须了解的几个重要问题.分享给大家供大家参考,具体如下: 1.索引是做什么的? 索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行. 表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据. 大多数MySQL索引(PRIMARY KEY.UNIQUE.INDEX和FULLTEXT)在B树中存储.只是空间列类型的索引使用R-树,并且MEMORY
-
Mysql使用索引实现查询优化
索引的目的在于提高查询效率,可以类比字典,如果要查"mysql"这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需要把所有单词看一遍才能找到你想要的. 1.索引的优点 假设你拥有三个未索引的表t1.t2和t3,每个表都分别包含数据列i1.i2和i3,并且每个表都包含了1000条数据行,其序号从1到1000.查找某些值匹配的数据行组合的查询可能如下所示: SELECT t1.i1, t2.i2, t3.i3 FROM t1, t2,
-
Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
场景 产品中有一张图片表pics,数据量将近100万条,有一条相关的查询语句,由于执行频次较高,想针对此语句进行优化 表结构很简单,主要字段: 复制代码 代码如下: user_id 用户ID picname 图片名称 smallimg 小图名称 一个用户会有多条图片记录,现在有一个根据user_id建立的索引:uid,查询语句也很简单:取得某用户的图片集合: 复制代码 代码如下: select picname, smallimg from pics where user_id = xxx; 优化
-
MySql索引详细介绍及正确使用方法
MySql索引详细介绍及正确使用方法 1.前言: 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点. 索引是存储引擎用于快速查找记录的一种数据结构,通过合理的使用数据库索引可以大大提高系统的访问性能,接下来主要介绍在MySql数据库中索引类型,以及如何创建出更加合理且高效的索引技巧. 注:这里主要针对的是InnoDB存储引擎的B+Tree索引数据结构 2.索引的优点 1.大大减轻了服务器需要扫描的数据量,从而提高了数据的检索速度 2.帮助服务器避免排序和临时表 3.可以将
-
Mysql索引详细介绍
Mysql索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节.大多数存储引擎有更高的限制. 在MySQL 5.1中,对于MyISAM和InnoDB表,前缀可以达到1000字节长.请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句中的前缀长度解释为字符数.当为使用多字节字符集的列指定前缀长度时一定要加以考虑. 还可以创建
-
mysql 索引详细介绍
mysql 索引详解: 在mysql 中,索引可以分为两种类型 hash索引和 btree索引. 什么情况下可以用到B树索引? 1.全值匹配索引 比如: orderID="123" 2.匹配最左前缀索引查询 比如:在userid 和 date字段上创建联合索引. 那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引. 3.匹配列前缀查询 比如: order_sn like '134%' 这样可以使用到索引. 4
-
mysql数据库之索引详细介绍
目录 思维导图 简单理解 索引模型的演变 二叉查找树 自平衡二叉树 B树 B+树 聚集索引与二级索引 总结 如果你想深入了解为什么mysql可以快速的进行检索数据,那么你一定要来了解一下mysql的索引原理 思维导图 简单理解 你可以把索引理解为一本书的目录,我们可以通过索引快速的找到我们需要的数据,大概就像下面这个图,索引就像是右边的二叉树,每个节点指向具体的数据的物理地址,先通过二叉树找到数据的位置,然后再去物理磁盘中获取数据. 但是不同的二叉树的特性不同,我们还要选择合适的树来作为索引,所
-
MySQL索引详细解析
目录 1. MySQL 索引的最左前缀原则 2. 前缀索引 3. 索引下推(ICP——Index Condition Pushdown) 4. 查看 MySQL 语句是否用到索引 5. 为什么官方建议用自增长主键作为索引 6. 如何创建索引 7. 创建索引注意事项 8. 使用索引一定可以提高查询性能嘛 9. 索引失效 1. MySQL 索引的最左前缀原则 左前缀原则是联合索引在使用时要遵循的原则,查询索引可以使用联合索引的一部分,但是必须从最左侧开始.在创建联合索引时,要根据业务需求,where
-
mysql事务详细介绍
目录 简介 事务四个特性 事务隔离级别 验证 MVCC 当前读 快照读 当前读.快照读.MVCC关系 mvcc 解决的问题 MVCC实现原理 可见性规则 简介 事务是由一组sql语句组成的逻辑处理单元 事务四个特性 原子性(Atomicity): 要么都成功要么都失败 undo log实现 一致性(Consistent): 如转账前后两个数额总合保持不变 隔离性(lsolation):数据库提供一定的隔离机制,保证事务在不受外部并发操作影响的"独立"环境下运行 锁,mvcc多版本并发控
-
MySQL游标详细介绍
目录 1.什么是游标(或光标) 2.如何使用游标 1.声明游标 2.打开游标 3.使用游标 4.关闭游标 3.代码举例 4.小结 1.什么是游标(或光标) 虽然我们也可以通过筛选条件 WHERE 和 HAVING,或者是限定返回记录的关键字 LIMIT 返回一条记录,但是,却无法在结果集中像指针一样,向前定位一条记录.向后定位一条记录,或者是随意定位到某一条记录,并对记录的数据进行处理. 这个时候,就可以用到游标.游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录进行定位,并对指向
-
Mysql Explain 详细介绍
Mysql Explain 这里做一个资料的全面整理. 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二.explain输出解释 +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | typ
-
python中使用mysql数据库详细介绍
一.安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的linux 仓库中都会有mysql ,我们只需要通过一个命令就可以下载安装: Ubuntu\deepin 复制代码 代码如下: >>sudo apt-get install mysql-server >>Sudo apt-get install mysql-client centOS/
-
Java连接MySql的详细介绍
1. 现在工程(不是Src)上右键--Build Path--Add External Archives,选择驱动下的那个jar包,这是release版本,bin目录下的是debug版本. 示例在docs下的connector-j.html,里面有例子(其中的test是数据库名,换位自己的). 复制代码 代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; Co
随机推荐
- jQuery实现可拖拽3D万花筒旋转特效
- jdbc链接远程数据库进行修改url操作
- Three.js学习之文字形状及自定义形状
- Apache下通过shell脚本提交网站404死链的方法
- ASP.NET Core应用中与第三方IoC/DI框架的整合
- addRule在firefox下的兼容写法
- Android 微信摇骰子和猜拳作弊器原理解析
- 深入理解Android 5.0中的Toolbar
- JavaScript入门教程(3) js面向对象
- 载入jQuery库的最佳方法详细说明及实现代码
- js实现页面转发功能示例代码
- jQuery操作cookie方法实例教程
- 基于jquery 的一个progressbar widge
- jQuery实现类似滑动门切换效果的层切换
- JQuery中关于jquery.js与jquery.min.js的比较探讨
- JS 仿Flash动画放大/缩小容器
- 颜色快速采集器javascript代码
- 图片翻转效果具体实现代码
- Android实现自定义滑动式抽屉效果菜单
- 简单实现C#窗体程序判断是否闰年