MySQL索引学习

MySQL的索引在存储引擎层实现的,性能跟存储引擎有关。

MySQL的索引类型

B-tree索引采用的是B+tree的结构。

B+tree是一个平衡查找树,每个叶子到根节点的路径是相同的。特点:能够加快数据的查询速度。更适合范围查找。

使用场景:全值匹配查找;匹配最左前缀查询;匹配列前缀查询;精确匹配左前列,并范围匹配另外一列;只访问索引的查询。

使用限制:如果不是按照索引最左列开始查找,则无法使用索引;使用索引时不能跳过索引中的列;Not in 和<>不能使用索引;

如果查询中有某个列的范围查询,则其右边所有列都无法使用索引。

Hash索引

是基于Hash表实现的,特点:(1)只有查询条件精确匹配Hash索引中的所有列时,才能使用到Hash索引。(2)对Hash索引的所有列,存储引擎会为每一行计算一个Hash码,Hash索引中存储的就是Hash码。

限制:(1)必须进行二次查找。(2)无法用于排序,(3)不支持部分索引查找也不支持范围查找。(4)Hash码的计算可能存在Hash冲突。

使用索引的原因:

(1)减少了存储引擎扫描的数据量。(2)帮我们排序,避免使用临时表。(3)把随机I/O变为顺序I/O。

索引的确定

(1)索引会增加写操作的成本。(2)太多的所有会增加查询优化器的选择时间。

索引优化策略:

(1)索引列上不能使用表达式或函数。(2)对字符串前缀建立索引。索引的选择性是不重复的索引值和表的记录数的比值。

(3)联合索引。索引列的顺序:经常被使用到的列优先、选择性高德列优先,宽度小的列优先。

(4)覆盖索引。优点:优化缓存,减少磁盘IO的操作。减少随机IO,避免对Innodb主键索引的二次查询。避免MyISAM表进行系统调用。不能使用该索引的情况:存储引擎不支持覆盖索引,查询中使用了太多的列。使用了双%的like查询。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中,SUM函数是用来计算某一列的总和的。然而,SUM函数本身并不会使用索引,因为它需要扫描整个表来计算总和。对于SUM函数的索引优化,有以下几点可以考虑: 1. 建立涵盖索引:可以为包含SUM计算的列和其他需要的列建立一个涵盖索引。涵盖索引是一个包含了查询所需的所有列的索引,这样查询可以直接从索引中获取数据,而不需要回表读取数据行。 2. 使用汇总表:可以创建一个汇总表,将SUM计算的结果存储在汇总表中,并使用触发器或定时任务来保持汇总表的数据与源表同步。在查询时,可以直接从汇总表中获取SUM计算的结果,而不需要扫描整个表。 3. 使用分区表:如果数据量非常大,可以考虑将表进行分区,并在分区表上创建索引。这样可以将计算过程分散到多个分区上,提高计算效率。 需要注意的是,以上方法仅适用于某些特定情况下的优化,并不是通用的方法。在具体情况中,还需要考虑表的大小、数据的分布情况、查询的频率等因素,以选择合适的优化方案。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Mysql&mdash;&mdash;》索引的创建与使用](https://blog.csdn.net/weixin_43453386/article/details/124518403)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【2.21】MySQL索引、动态规划、学习方法](https://blog.csdn.net/weixin_62633072/article/details/129150005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值