目录

  • 1、场景还原
  • 2、名词解释
  • 3、实践情况
  • 4、个人观点
  • 5、引申问题

1、场景还原

面试官:小伙子,听说你会SQL调优,那我这里有一条SQL,你来帮我调优一下。SQL如下: SELECT * FROM T LIMIT 899999, 10;

表结构如下:

id int(10) primary key,
其他字段……
我:¿¿¿(缓缓打出反问号),这条SQL要干嘛,随机找10条数据吗?
面试官:哦,不好意思,忘记加上排序了SELECT * FROM T ORDER BY id LIMIT 899999, 10;
我:如果id是连续不中断的话可以这样写。 SQL如下:SELECT * FROM T where id >= 899999 LIMIT 0, 10;
面试官:那假如id不是连续的呢?
我:(略加思考)单从SQL优化层面我优化不了了。
面试官:……那我们进行下一个话题……
我:……
面试官:那最后你有什么问题想问我的吗?
我:刚才那条SQL从SQL层面上该如何优化?
面试官:你可以这样写:SELECT * FROM T t where t.id >= (SELECT f.id FROM T f ORDER BY id DESC LIMIT 899999, 1) LIMIT 0, 10;
我:(假装略加思考)你确定这样写会比图一这条SQL:SELECT * FROM T ORDER BY id LIMIT 899999, 10;更快吗?在图一的SQL里已经是通过主键索引去查询数据了,你图二的SQL并没有改变原有的查找方式。如果你原有SQL是通过其他字段去排序的,用的是非主键索引,例如:SELECT * FROM T ORDER BY createdTime LIMIT 899999, 10;那么你第二条SQL的写法确实会比第一条SQL快得多,因为在MySQL里非主键索引与主键索引在查找上的区别是,非主键索引他存储的是索引列与主键列的值,查找具体的值还需要一次回表过程,而主键索引存储了是整行数据,不需要再次***回表***[^①]查找,减少了一次查找过程。
面试官:……
我:……

2、名词解释

回表

指查找时通过非主键索引(非聚簇索引)去查找对应的记录的主键后,仍需要根据主键进行再一次的查找,这是MySQL的索引结构引起的。在MySQL中,主键索引(聚簇索引)存储的是一整行的数据,而非主键索引(非聚簇索引)存储的是主键列的值。

假如有这样一张表

CREATE TABLE person (id int(11) NOT NULL,name varchar(32) NOT NULL,age int(11) NOT NULL,PRIMARY KEY (id),KEY idx_person_age (age)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

那这张表的索引具体表现形式如下:

主键索引:

非主键索引:

所以当我们需要查找age=30的数据时,他的查找过程如下图:

3、实践情况

如今我有这样一张表:
CREATE TABLE file (id int(11) NOT NULL AUTO_INCREMENT,name varchar(255) DEFAULT NULL,created_time datetime NOT NULL,updated_time datetime NOT NULL,PRIMARY KEY (id),KEY idx_file_created_time (created_time) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=954185 DEFAULT CHARSET=utf8mb4;
表的数据数量为:
先来看看面试官说的情况

可以看出,查询时间并没有很大的差距,这是因为这两条SQL都是走的主键索引,方式并没有很大的差别
而我列举的情况,通过时间字段进行排序,让其产生回表操作的过程。

可以看出,查询时间出现了很大的差距,这是由于回表操作所造成的。

4、个人观点

这个场景就发生在我上星期的面试中,我不知道这个面试官出这个题时是故意留坑还是什么情况,但是在后面他给出他那答案时,实在是让我惊讶,希望他是一时的错误,若是他对SQL的本身理解就不熟悉,那就……………………

5、引申问题

(1)在file表中,假如我所查询的数据列只有id、created_time与updated_time,那么还可以怎么做?
(2)当真的只能通过id进行排序分页时,我们该怎么做?

记面试中问到的MySQL的SQL调优问题相关推荐

  1. Mysql排序添加名词_记面试中问到的MySQL的SQL调优问题

    目录 1.场景还原 2.名词解释 3.实践情况 4.个人观点 5.引申问题 1.场景还原 面试官:小伙子,听说你会SQL调优,那我这里有一条SQL,你来帮我调优一下.SQL如下: SELECT * F ...

  2. MySQL慢SQL调优

    前言 在日常开发工作中,数据库是常用的数据存储组件,一旦使用了数据库,那慢查询SQL的优化是绕不开的一道坎,本文旨在分享下自己对平时开发工作中进行SQL调优的理解.本文使用的MySQL版本为 8.0. ...

  3. MYSQL 之 SQL 调优

    SQL 调优 不适用子查询 SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang'); 子查询在 MYSQL5.5 版 ...

  4. 【MySQL】sql调优实战教学

    如何定位并优化慢查询Sql? 具体场景具体分析只提出大致思路,其实这个问题属于开放性的题目,主要考察有没有做过SQL优化,由于该问题属于经验的问题,做过了就是做过了没做过就是没做过,问了你就知道是没有 ...

  5. mysql 常用sql调优_MySQL 常用SQL优化

    MySQL 常用SQL优化: 一.大批量插入数据: 1.对于load MyISAM存储引擎的表,可以通过关闭打开MyISAM表非唯一索引的更新来提升导入速度: 例:mysql > alter t ...

  6. 面试官问:如果MySQL引起CPU消耗过大,你会怎么优化

    转载自  面试官问:如果MySQL引起CPU消耗过大,你会怎么优化 谁在消耗cpu? 用户+系统+IO等待+软硬中断+空闲 祸首是谁? 用户 用户空间CPU消耗,各种逻辑运算 正在进行大量tps 函数 ...

  7. Mysql高级调优篇——第五章:Sql调优在面试中深度剖析

    上节讲了Sql调优实战,本章聊聊面试中Sql调优深度的剖析场景! 在讲之前我们先做一些准备工作,建立一些需要用到的表: Mysql高级调优篇表补充--建表SQL_风清扬逍遥子的博客-CSDN博客⭐️t ...

  8. UI设计师在面试中问到频率最高的五个问题!

    对于面试者而言,面试中的表现决定了这场面试的成败.尤其是在面对面试官的提问时,更应该慎重,很多问题面试官问的看似平常,实际上可以从你的回答中推测出他们想要的答案.针对UI设计初学者们反馈的问题,我总结 ...

  9. Mysql数据库性能调优面试大全经典分析

    1.为啥要死磕Mysql Mysql作为一款大众免费开源的关系型数据库软件,受到国内很多"穷屌丝"企业的热烈欢迎,看一下目前最新数据库排行,Mysql排在第二位,仅此于Oracle ...

最新文章

  1. 北大清华合力打造通用人工智能实验班
  2. 开源网络备份软件bacula(安装bacula)
  3. 机甲才是男人的浪漫 这款Python版免费战争机甲类游戏,“白拿党”还在等什么?(超帅气)
  4. wxWidgets:wxProcess类用法
  5. C语言单片机数码管a段亮,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  6. 【若依(ruoyi)】表格图片预览功能图片超宽、超高问题
  7. linux驱动(七)gpiolib库详解
  8. Codeforces 527C Glass Carving (最长连续0变形+线段树)
  9. 亚信安全发布《2022年网络安全发展趋势及十大威胁预测》
  10. python tricks —— datetime 删除日期中的前导 0
  11. 加载字典文件,扫描网站潜在目录
  12. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本
  13. java 读文件内容_Java 如何读取txt文件的内容?
  14. RecyclerView通用适配器
  15. java jca_Java加密体系结构(JCA)参考指南
  16. 电商设计——3、点线面及光影
  17. 空调老大易主后,格力能否下定决心多元化?
  18. ORACLE几个关于工作日数的函数(原创)
  19. 使用豆瓣音乐API笔记
  20. 劲乐园合歌(幽灵圣典+飞吧喜鹊+唯一+v3+幽灵圣典2)铃声 劲乐园...

热门文章

  1. 读《鬼谷子的局》笔记
  2. php 当地天气预报,PHP调用全国天气预报数据接口查询天气示例
  3. python使用循环求斐波那契的第n项_深市收盘价如何确定,沪深股市收盘价怎样确定...
  4. C# Linq中 WherT 和SelectT 的区别
  5. 计算机二级补录成绩,成考没考过怎么办有补录机会吗
  6. 关于Freesurfer6.0海马体的分割环境以及步骤
  7. 薄荷英语---《心理学》20180823
  8. oracle如何查询授权,oracle授权查询
  9. 计算机动漫与游戏技术工资,计算机动漫与游戏制作专业是学什么的
  10. NAS:以数据为中心的数据存储模式[zt]