首页 > 数据库 >MySQL什么情况下应该建单列索引?什么情况下应该建组合索引?

MySQL什么情况下应该建单列索引?什么情况下应该建组合索引?

时间:2023-08-15 14:47:34浏览次数:39  
标签:组合 创建 单列 查询 索引 姓名 MySQL

假设有一张用户表,姓名和创建时间是用来查询最多的字段,如果要建索引,是单独给姓名、创建时间来建单列索引好?还是给它们建组合索引好?  其实决定为MySQL表中的字段创建单列索引还是组合索引需要考虑你的查询模式和需求。下面是一些建议:

  1. 单列索引 vs. 组合索引

    • 单列索引:当我们经常单独基于姓名或创建时间查询时,为这两个字段分别创建单列索引是有意义的。
    • 组合索引:如果实际查询经常同时使用姓名和创建时间作为条件(例如,找出特定时间段内特定姓名的用户),那么一个组合索引可能更有意义。
  2. 组合索引的顺序

    • 当创建组合索引时,索引的顺序很重要。例如,如果经常根据姓名进行查询,并偶尔按创建时间进行过滤,那么索引应该是(姓名, 创建时间)。这样,该索引可以支持基于姓名的查询,同时也可以支持基于姓名和创建时间的联合查询。
    • 如果两个字段在查询中的重要性大致相同,则选择哪个字段作为组合索引的第一个字段可能需要进行实际的性能测试。
  3. 考虑覆盖索引

    • 如果实际查询只返回姓名和创建时间,那么一个包含这两个字段的组合索引将作为一个覆盖索引,这意味着MySQL可以只通过索引来满足查询,而无需访问表的实际数据。
  4. 避免过度索引

    • 创建过多的索引可能会导致写操作(如插入和更新)变慢,因为索引需要被更新。此外,过多的索引也会占用额外的存储空间。

综上所述,我们需要根据实际的查询模式来决定是建单列索引还是组合索引:

  • 如果你经常单独基于姓名或创建时间查询,为这两个字段创建单列索引。
  • 如果你经常同时使用姓名和创建时间作为查询条件,考虑创建一个组合索引。
  • 最后,建议使用EXPLAIN来分析查询的执行计划,观察索引的使用情况,然后根据需要进行调整。

标签:组合,创建,单列,查询,索引,姓名,MySQL
From: https://www.cnblogs.com/shamo89/p/17631226.html

相关文章

  • docker容器部署mysql主从集群
    第一步先将mysql镜像从dockerhub拉取到本地dockerpullmysql:5.7第二步为了避免容器出现问题后导致数据丢失,我们通常需要创建容器的数据卷,通过启动时创建volume让数据存放在本地中。创建volume目录mkdir-p/mysql_master/logmkdir-p/mysql_master/datamkdir-p/mysql_maste......
  • MySQL存储过程
    1.什么是存储过程是一组为了完成特定功能的sql语句集合经编译后保存在数据库中通过指定存储过程的名字并给出参数的值可带参数,也可返回结果可包含数据操纵语句、变量、逻辑控制语句等使数据库引擎更加灵活和强大2.使用存储过程的目的提高性能:存储过程将一组sql语句封装在一个单元中......
  • 学好Elasticsearch系列-索引的批量操作
    本文已收录至Github,推荐阅读......
  • 使用Logstash同步Mysql到Easysearch
    从Mysql同步数据到ES有多种方案,这次我们使用ELK技术栈中的Logstash来将数据从Mysql同步到Easysearch。方案前提Mysql表记录必须有主键,比如id字段。通过该字段,可将Easysearch索引数据与Mysql表数据形成一对一映射关系,支持修改。Mysql表记录必须有时间字段,......
  • MySQL 执行计划详解
    1.EXPLAIN详解本文基于MySQL8.0编写,理论支持MySQL5.0及更高版本。2.EXPLAIN使用2.1explain分析SQL的执行计划{EXPLAIN|DESCRIBE|DESC}tbl_name[col_name|wild]{EXPLAIN|DESCRIBE|DESC}[explain_type]{explainable_stmt|FORCONNECTIONconne......
  • Nacos2 + Mysql8 作为数据源的建表语句
    在MySQL中创建nacos用户,MySQL创建名为Nacos的Schema,并授权nacos用户可以访问。语句如下:mysql>createuser'nacos'@'%'identifiedby'password';mysql>createschemanacos;mysql>grantALLonnacos.*to'nacos'@'%';或者直接新建一个n......
  • 使用Logstash同步Mysql到Easysearch
    从Mysql同步数据到ES有多种方案,这次我们使用ELK技术栈中的Logstash来将数据从Mysql同步到Easysearch。方案前提Mysql表记录必须有主键,比如id字段。通过该字段,可将Easysearch索引数据与Mysql表数据形成一对一映射关系,支持修改。Mysql表记录必须有时间字段,以支持......
  • 搜索引擎优化:从技巧到策略的完整指南
    导言:在当今数字化时代,搜索引擎已成为人们获取信息和产品的主要途径。为了在竞争激烈的网络世界中脱颖而出,搜索引擎优化(SEO)变得至关重要。本文将为您提供一个从技巧到策略的完整SEO指南,帮助您在搜索结果中获得更高的排名和更多的流量。一、关键词研究和优化目标定位: 确定您的......
  • mysql添加索引的方法(Navicat可视化加索引和sql语句加索引)
    mysql添加索引的方法(Navicat可视化加索引和sql语句加索引) 使用索引的场景:阿里云日志里出现了慢sql 然后发现publish_works_id字段会经常用于一些关联,所以决定把这个字段加上索引,优化sql可视化navicat操作字段加索引,选择字段所在的表,第一步:右键->设计表第二步......
  • Zabbix监控Mysql主从
    一、主机规划服务器IPzabbix-server192.168.131.12mysql-master,zabbix-agent192.168.131.13mysql-slave,zabbix-agent192.168.131.14二、部署&配置zabbix-server2.1部署zabbix#安装Zabbix仓库。这里部署zabbix6.4wgethttps://repo.zabbix.com/zabbix/6.4/ubuntu/pool/main/z/zabb......