在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 MySQL索引是数据库管理系统中用来加速数据检索的关键技术。索引可以显著提升查询速度,减少数据扫描量,尤其是在大数据量的表中。本教程主要关注MySQL中的两种索引类型:哈希索引(Hash Index)和B树索引(BTree Index)。 **B树索引** 1. **全值匹配索引**:当查询条件是索引列的完整值时,如`orderID="123"`,B树索引能够快速定位到对应记录。 2. **匹配最左前缀索引**:联合索引`userId`和`date`,若查询条件为`userId`,索引可用;如果直接使用`date`,则索引不可用。这是因为B树索引遵循最左前缀原则。 3. **匹配列前缀查询**:如`order_sn LIKE '134%'`,索引可被利用。 4. **匹配范围值查询**:如`createTime > '2015-01-09' AND createTime < '2015-01-10'`,B树索引可以支持范围查找。 5. **精确匹配左前列并范围匹配另一列**:如`userId=1 AND createTime>'2016-9-18'`,这种情况也能有效利用索引。 6. **覆盖索引**:如果查询列完全包含在索引中,数据库可以直接从索引获取数据,无需访问数据文件,提高效率。 **B树索引的限制** 1. 查询不从最左列开始,索引无法使用。 2. 不能跳过中间列,如三列索引`日期,姓名,电话`,仅`日期`和`电话`不能利用索引。 3. `NOT IN`和`<>`操作无法使用索引。 4. 范围查询后,右侧所有列无法使用索引。 **哈希索引** 1. **特点**:哈希索引基于哈希表,适用于等值查询,不支持范围或部分查询。 2. **限制**:哈希冲突可能导致性能下降,且不支持排序和非精确匹配。此外,哈希索引需要两次读取,先读取哈希值,再读取实际数据。 3. **选择性**:哈希索引应在选择性较高的列上创建,避免选择性差的字段,如性别字段。 **为什么使用索引** 1. 减少数据扫描量,提高查询速度。 2. 帮助排序,避免创建临时表。 3. 改变I/O模式,从随机I/O变为顺序I/O。 **索引策略** 1. 避免在索引列上使用表达式或函数。 2. 注意索引列长度限制,InnoDB的索引列大小约为200个字符。 3. 考虑选择性和列大小创建前缀索引。 4. 联合索引的列顺序应考虑查询频率、选择性及列的大小。 在实际应用中,建立索引并非越多越好,过多的索引会影响写操作,也会增加查询优化器的负担。明智地选择索引,结合业务需求和查询模式,可以最大化数据库性能。
- 粉丝: 4
- 资源: 947
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- qaxbrowser-1.1.32574.52.exe (奇安信浏览器windows安装包)
- C#编写modbus tcp客户端读取modbus tcp服务器数据
- 某房地产瑞六补环境部分代码
- 基于Matlab实现无刷直流电机仿真(模型+说明文档).rar
- AllSort(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
- 模拟qsort,改造冒泡排序使其能排序任意数据类型,即日常练习
- carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化
- 数组经典习题之顺序排序和二分查找和冒泡排序
- 永磁同步电机神经网络自抗扰控制,附带编程涉及到的公式文档,方便理解,模型顺利运行,效果好,位置电流双闭环采用二阶自抗扰控制,永磁同步电机三闭环控制,神经网络控制,自抗扰中状态扩张观测器与神经网络结合
- 基于 Oops Framework 提供的游戏项目开发模板,项目中提供了最新版本 Cocos Creator 3.x 插件与游戏资源初始化通用逻辑
评论0