首页 > 数据库 >MySQL创建索引有哪些注意点?

MySQL创建索引有哪些注意点?

时间:2023-10-13 13:01:11浏览次数:53  
标签:前缀 哪些 创建 单列 主键 索引 MySQL 区分度

索引虽然是sql性能优化的利器,但是索引的维护也是需要成本的,所以创建索引,也要注意:

1. 索引应该建在查询应用频繁的字段在用于 where 判断、 order 排序和 join 的(on)字段上创建索引。

2. 索引的个数应该适量

索引需要占用空间;更新时候也需要维护。

3. 区分度低的字段,例如性别,不要建索引。

离散度太低的字段,扫描的行数降低的有限。

4. 频繁更新的值,不要作为主键或者索引

维护索引文件需要成本;还会导致页分裂,IO次数增多。

5. 组合索引把散列性高(区分度高)的值放在前面

为了满足最左前缀匹配原则

6. 创建组合索引,而不是修改单列索引。

组合索引代替多个单列索引(对于单列索引,MySQL基本只能使用一个索引,所以经常使用多个条件查询时更适合使用组合索引)

7. 过长的字段,使用前缀索引。

当字段值比较长的时候,建立索引会消耗很多的空间,搜索起来也会很慢。我们可以通过截取字段的前面一部分内容建立索引,这个就叫前缀索引。

8. 不建议用无序的值(例如身份证、UUID )作为索引

当主键具有不确定性,会造成叶子节点频繁分裂,出现磁盘存储的碎片化。

标签:前缀,哪些,创建,单列,主键,索引,MySQL,区分度
From: https://blog.51cto.com/u_16255459/7844159

相关文章

  • zabbix监控mysql主从同步
    主从同步搭建 https://www.cnblogs.com/cndr/p/17756341.html一、mysql-slave主机上编写自定义监控项[root@mysql-slave~]#cat/etc/zabbix/zabbix_agentd.d/mysql.confUserParameter=mysql-tongbu,mysql-e"showslavestatus\G"|grep"Running"|awk"{pr......
  • Mysql_Bypass
    中间件过滤绕过1、大小写绕过mysql>SelEct*frOmUserS;+----+----------+----------------------------------+-------+|id|username|password|level|+----+----------+----------------------------------+-------+|1|admin|......
  • MySQL的index merge(索引合并)导致数据库死锁分析与解决方案 | 京东云技术团队
    背景在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-indexmerge(索引合并)导致数据库死锁。定义indexmerge(索引合并):该数据库查询优化的一种技术,在mysql5.1之后进行引入,它可以在多个索引上进行查询,并将结果合并返回。mysql数据库的......
  • MySQL的index merge(索引合并)导致数据库死锁分析与解决方案
    背景在DBS-集群列表-更多-连接查询-死锁中,看到9月22日有数据库死锁日志,后排查发现是因为mysql的优化-indexmerge(索引合并)导致数据库死锁。定义indexmerge(索引合并):该数据库查询优化的一种技术,在mysql5.1之后进行引入,它可以在多个索引上进行查询,并将结果合并返回。mysql数......
  • MySQL的驱动表与被驱动表
    驱动表与被驱动表的含义在MySQL中进行多表联合查询时,MySQL会通过驱动表的结果集作为基础数据,在被驱动表中匹配对应的数据,匹配成功合并后的临时表再作为驱动表或被驱动表继续与第三张表进行匹配合并,直到所有表都已匹配完毕,最后将结果返回出来。匹配算法:Nested-LoopJoin(嵌套循环连......
  • MHA设置mysql的主从及遇到的坑
    记录一下搭建MHA主从的完整过程,同时也把自己部署过程中遇到的坑写进来参考链接:https://blog.csdn.net/m0_49526543/article/details/109483659https://blog.csdn.net/hahaxixi131/article/details/122282665https://www.cnblogs.com/jiabrother/p/14108302.html 先说一下......
  • Skywalking APM监控系列(二、Mysql、Linux服务器与前端JS接入Skywalking监听)
    前言上篇我们介绍了Skywalking的基本概念与如何接入.NetCore项目,感兴趣可以去看看:SkywalkingAPM监控系列(一丶.NET5.0+接入Skywalking监听)本篇我们主要讲解一下Skywalking如何接入mysql数据库监听与Linux服务器的监听其实从Skywalking设计之初应该只是单独的链路跟踪,发......
  • 强制走索引
    forceindex(ix_utmsource_signup_activated)强制走索引FROMemb_xxxxa<iftest="ixUtxxxSignup!=nullandixUxxxSignup">forceindex(ix_xxxx)</if> ......
  • MYSQL GROUP BY 对多个字段进行分组
    在平时的开发任务中我们经常会用到MYSQL的GROUPBY分组,用来获取数据表中以分组字段为依据的统计数据。比如有一个学生选课表,表结构如下:Table:Subject_SelectionSubjectSemesterAttendeeITB0011JohnITB0011BobITB0011Micke......
  • 深入MySQL索引,这篇千万不能错过
    大家好,我是【码老思】,索引是一个数据库绕不开的话题,今天和大家一起聊聊。1.索引索引是对数据库表中一列或多列的值进行排序的一种结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。索引只是提高效率的一个因素,如果你的MySQL有大数据量......