mysql面试题——索引创建与设计原则

一:哪些情况适合创建索引?

  1. 字段的数值有唯一性的限制

  2. 频繁作为 WHERE 查询条件的字段

  3. 经常 GROUP BY 和 ORDER BY 的列

  4. DISTINCT 字段需要创建索引:有时候我们需要对某个字段进行去重

     SELECT DISTINCT(student_id) FROM `student_info`;运行结果(600637 条记录,运行时间 0.683s ):如果我们对 student_id 创建索引,再执行 SQL 语句:SELECT DISTINCT(student_id) FROM `student_info`;运行结果(600637 条记录,运行时间 0.010s ):
    
  5. 多表 JOIN 连接操作时,创建索引注意事项

     首先, 连接表的数量尽量不要超过 3 张,其次, 对 WHERE 条件创建索引最后, 对用于连接的字段创建索引 ,并且该字段在多张表中的 类型必须一致
    
  6. 使用列的类型小的创建索引

  7. 使用字符串前缀创建索引

  8. 使用最频繁的列放到联合索引的左侧

  9. 在多个字段都要创建索引的情况下,联合索引优于单值索引

二:哪些情况不适合创建索引

  1. 在where中使用不到的字段,不要设置索引

  2. . 数据量小的表最好不要使用索引

  3. 有大量重复数据的列上不要建立索引

  4. 避免对经常更新的表创建过多的索引

  5. 不建议用无序的值作为索引

    例如身份证、UUID、MD5、HASH、无序长字符串等。
    
  6. 删除不再使用或者很少使用的索引

  7. 不要定义冗余或重复的索引
    (1)冗余索引

     CREATE TABLE person_info(id INT UNSIGNED NOT NULL AUTO_INCREMENT,name VARCHAR(100) NOT NULL,birthday DATE NOT NULL,phone_number CHAR(11) NOT NULL,country varchar(100) NOT NULL,PRIMARY KEY (id),KEY idx_name_birthday_phone_number (name(10), birthday, phone_number),KEY idx_name (name(10)));
    

我们知道,通过 idx_name_birthday_phone_number 索引就可以对 name 列进行快速搜索,再创建一个专门针对 name 列的索引就算是一个 冗余索引
(2)重复索引

CREATE TABLE repeat_index_demo (
col1 INT PRIMARY KEY,
col2 INT,
UNIQUE uk_idx_c1 (col1),
INDEX idx_c1 (col1)
);

我们看到,col1 既是主键、又给它定义为一个唯一索引,还给它定义了一个普通索引,可是主键本身就会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况要避免

三:慢SQL的问题如何排查?

慢查询是指数据库中查询时间超过指定阈值的SQL,这个阈值根据不同的业务来说一般是不一
样的,慢SQL的问题排查一般分为几个步骤:发现问题,定位问题,解决问题
发现问题
在MySQL的配置文件 my.cnf, 配置启用慢SQL日志

slow_query_log = 1
slow_query_log_file =/path/to/slow-query.log
long_query_time = 1

定位问题
通过上述的日志中,我们就可以找到对应的慢SQL的具体SQL了,然后就可以进一步分析为什么这个SQL是慢SQL了,大多数情况,是可以通过执行计划分析出一条SQL的慢的原因的,大部分来说,主要是索引的问题和join的问题。
解决问题
一旦一个问题被定位到了,解决起来都比较容易。缺索引就加索引,join太多就拆分就好了。

四:SQL执行计划分析的时候,要关注哪些信息?

一个执行计划中,共有12个字段,每个字段都挺重要的,先来介绍下这12个字段
1.id:执行计划中每个操作的唯一标识符。对于一条查询语句,每个操作都有一个唯一的
id。但是在多表join的时候,一次explain中的多条记录的id是相同的。
2、select_type:操作的类型。常见的类型包括SIMPLE、PRIMARY、SUBQUERY、UNION
等。不同类型的操作会影响查询的执行效率。
3:table:当前操作所涉及的表。
4.partitions:当前操作所涉及的分区。
5.type:表示查询时阶使用的索引类型,包括ALL、index、range、ref、eq_ref、const
等。
6. possible_keys:表示可能被查询优化器选择使用的索引。
7. key:表示查询优化器选择使用的索引。
8. key_len:表示索引的长度。索引的长度越短,查询时的效率越高。
9. ref:用来表示哪些列或常量被用来与key列中命名的索引进行比较。
10. rows:表示此操作需要扫描的行数,即扫描表中多少行才能得到结果。
11.filtered:表示此操作过滤掉的行数占扫描行数的百分比。该值越大,表示查询结果越准
确。
12.Extra:表示其他额外的信息,包括Using index、Using filesort、Using temporary
等。

五:索引失效的问题如何排查?

第一步一定是找到要分析的SQL语句,然后通过explain查看他的执行计划。主要关注type、key和extra这几个字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

王学岗切面编程(AOP)最新配置

不懂啥是切面编程的看我这篇文章 本文主要讲解最新的切面编程配置 首先看下app的build.gradle界面,有两处配置 plugins {id("com.android.application")id("org.jetbrains.kotlin.android") // 配置1id("com.ibotta.gradle.aop")…

C++大小写字母转换

这内容确实很初级了,就是ascii码的加减转换类型输出,但是以往都是学学理论,好多东西还真掌握不扎实,现在通过实验了验证一下,代码如下 可以看到字母的大小写直接差了32,如果要进行转换的话对应加减就可以了…

C++ 获取当前目录下的指定后缀文件

获取指定目录下的所有指定格式文件&#xff0c;返回的列表将按照创建时间排序 注意&#xff1a;文件最早的在最前面 #include "shlwapi.h" #pragma comment(lib,"shlwapi.lib") #pragma comment(lib, "Version.lib ") #include <iostream&…

Redis Reactor事件驱动模型源码

前置学习&#xff1a;Redis server启动源码-CSDN博客 1、Redis服务器启动的时候就会就一直在轮询。 // 运行事件处理器&#xff0c;一直到服务器关闭为止 aeSetBeforeSleepProc(server.el,beforeSleep); aeMain(server.el);// 服务器关闭&#xff0c;停止事件循环 aeDeleteEven…

Hello World

世界上最著名的程序 from fastapi import FastAPIapp FastAPI()app.get("/") async def root():return {"message": "Hello World"}app.get("/hello/{name}") async def say_hello(name: str):return {"message": f"…

智慧配电运维系统解决方案

智慧配电运维系统依托电易云-智慧电力物联网&#xff0c;是一种基于云计算、物联网、大数据等先进技术的配电室运维管理系统&#xff0c;具有实时监测、智能分析、远程控制等特点&#xff0c;可以提高配电室的安全可靠性、运行效率和管理水平。 智慧配电运维系统解决方案通过以…

常见场景题-Redis的bitmap如何实现签到功能?

Redis 的 bitmap 实现签到系统&#xff1f; 答&#xff1a; 主要讲一下 Redis 原生的 bitmap 的使用方法&#xff0c;以及如何使用 bitmap 来实现签到功能 先来看一下如何使用 redis bitmap 的原生命令实现签到功能&#xff1a; 签到 我们先来设计 key&#xff1a;userid:y…

一文通关物理机Ubuntu22.04融合部署OpenStack

前言 因为博主笔记本是amd的&#xff0c;就最近搞了个小主机&#xff0c;就想装个云平台玩玩&#xff0c;搞了三四天才正儿八经弄完&#xff0c;摸了一大堆错误出来&#xff0c;在文章前面我会将这些需要注意的点列举出来。 环境 物理环境&#xff1a; i5 12450H 32G内存 无线…

css 3D背景反转实现

body{/* 透视 */perspective: 800px; } div{transform-style:preserve-3d;width:259px;height:396px;margin: 100px auto;position: relative; } div img{position: absolute;width:259px;height:396px;left:0;top:0;transition: all linear 2s;z-index: 0; } div img:nth-chil…

Centos7安装GItLab(在线版)

基础环境准备 1.配置清华大学镜像仓库 新建仓库配置文件使用 vim /etc/yum.repos.d/gitlab-ce.repo 命令&#xff0c;输入以下内容,保存 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck0 enabl…

ThreadLocal+TaskDecorator实现父子线程 参数传递

一、背景 我定义注解&#xff0c;在切面中实现动态数据源切换&#xff0c;但是目标方法中&#xff0c;使用新开线程&#xff0c;异步的方式执行&#xff0c;导致在切面中主线程切换数据源参数&#xff0c;无法在异步的目标方法中使用。 二、实现方式 1、创建UserUtils类。 …

免费文章生成器的种类,3款免费的文章生成器推荐

内容创作无疑是网络营销和品牌建设中不可或缺的一环。许多人在日常工作中可能会面临时间不足、灵感枯竭等问题&#xff0c;本文将深入聊聊免费文章生成器的种类&#xff0c;详细介绍使用方法。 1. 免费文章生成器的种类 基于模板的生成器 这类生成器通常提供一系列文章模板&…

清新脱俗的Notes主页

大家好&#xff0c;才是真的好。 作为Notes客户端重度用户&#xff0c;我个人非常喜欢Notes客户机&#xff0c;平时都在使用。对于另一些Notes用户&#xff0c;喜欢Notes的人非常喜欢&#xff0c;而且还知道它非常强大&#xff0c;可以进行很多定制化。 今天我们来讲的就是No…

PHP:解决一个字符串中的斜杠 / 进行 JSON 编码时,斜杠被转义为 \/

一、修改前 问题代码 直接通过JSON编码&#xff0c;就会出现问题 代码 $url SO/.$fileName; echo json_encode($url); 效果 二、解决后 代码 使用 json_encode 函数的第二个参数 JSON_UNESCAPED_SLASHES 来禁止对斜杠进行转义 $url SO/.$fileName; echo json_encode…

C#调用cmd.exe(dos命令)两种方法(Process,Cli)

1、通过Process调用cmd命令 1&#xff09;C&#xff03;运行shell命令 string strCmdText; strCmdText "/C copy /b Image1.jpg Archive.rar Image2.jpg"; System.Diagnostics.Process.Start("CMD.exe",strCmdText); 2&#xff09;运行cmd命令隐藏控制…

html实现好看的个人博客留言板源码

文章目录 1.设计来源1.1 博客主界面1.2 常用源码1.3 我的文章1.4 留言板1.5 联系我 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/134837482 html实现好看的个人博客留言…

【征稿倒计时十天,ACM独立出版,有确定的ISBN号,ei检索稳且快】

2023 人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff09; 2023 International Conference on Artificial Intelligence, Systems and Network Security 由西南科技大学计算机科学与技术学院主办的2023人工智能、系统与网络安全国际学术会议 (AISNS 2023&#xff0…

BearPi Std 板从入门到放弃 - 引气入体篇(9)(DAC->ADC)

简介 结合 BearPi Std 板从入门到放弃 - 引气入体篇&#xff08;7&#xff09;(DAC) 和 BearPi Std 板从入门到放弃 - 引气入体篇&#xff08;8&#xff09;(ADC) 这两篇&#xff0c; 实现 D -> A -> D 的转换, 也就是DAC -> ADC; 开发板 &#xff1a; Bearpi Std(小…

智能DNS与CDN:增强网络性能和用户体验

文章目录 智能DNS与CDN&#xff1a;增强网络性能和用户体验1. 智能DNS1.1 智能DNS简介1.2 智能DNS的工作原理1.3 智能DNS的优点 2. 内容分发网络&#xff08;CDN&#xff09;2.1 CDN简介2.2 CDN的工作原理2.3 CDN的优点 3. 智能DNS与CDN的结合4. 总结 智能DNS与CDN&#xff1a;…

浏览器判断某一个 ip 是否与其在同一个局域网的几种方式

前言 前段时间有个需求&#xff0c; 就是我们有做一个 web 的投屏端&#xff0c; 可以将另一个客户端(比如 android&#xff0c;ios&#xff0c;win&#xff0c;mac) 投屏到 web 站点来。 但是期间因为涉及到引流&#xff0c; 所以针对投屏的客户端是否在同一个局域网下要做不同…