数据库查询那些事儿,视频里一步步教你怎么查才快又准
- 问答
- 2026-01-07 21:48:35
- 9
(引用来源:B站UP主“程序员小山与bug”视频《SQL查询优化:从慢如蜗牛到快如闪电》开场白) “大家好,我是小山,今天我们不聊那些高大上的底层原理,就聊点实在的,你是不是经常遇到这种情况:写了个查询,一点执行,然后就可以去泡杯茶,回来发现还在转圈圈?别急,今天我就一步步带你看看,怎么让你的查询快起来。”
(引用来源:视频第一章“慢查询的罪魁祸首”) “我们得知道问题出在哪儿,一个查询慢,最常见的原因就像你在一个超大的图书馆里找一本书,但是没有目录,你只能一排排书架挨个翻,在数据库里,这个‘目录’索引’,如果你的查询条件字段上没有索引,数据库就得进行‘全表扫描’,也就是把整张表的数据一行行读出来比对,数据量一大,速度肯定就慢下来了。”
“那怎么知道有没有用上索引呢?很简单,在你的SQL语句前面加上一个关键词‘EXPLAIN’,然后执行,这个命令不会真的执行你的查询,而是会告诉你数据库‘打算’怎么执行,你会看到一列叫做‘type’的,如果这里显示的是‘ALL’,那就坏事了,说明它准备全表扫描,我们追求的是看到‘ref’或者‘range’这样的字眼,这说明它用上索引了。”
(引用来源:视频第二章“创建索引的讲究”) “知道了索引重要,是不是赶紧给每个字段都建上索引就好了?千万别!索引不是越多越好,这就像给你的书贴标签,如果你每页纸都贴一个标签,那标签本就比书还厚了,找起来更麻烦,索引也会占用空间,而且在增删改数据的时候,数据库还需要额外时间去维护索引,所以索引太多反而会降低整体性能。”

“那怎么建索引呢?记住几个原则,第一,‘选择性高’的字段适合建索引,什么是选择性高?性别’字段,只有‘男’‘女’两种可能,你建了索引,查起来也还是要筛选出一大半数据,效果不好,但像‘身份证号’、‘用户名’这种几乎不重复的字段,建索引效果就立竿见影,第二,关注你的查询条件‘WHERE’子句里最常用的字段,第三,如果经常同时用几个字段来查询,WHERE 城市=‘北京’ AND 年龄>30’,可以考虑建立一个包含这两个字段的‘联合索引’。”
(引用来源:视频第三章“SQL语句的写法陷阱”) “好,索引建对了,但查询还是慢?那可能是你的SQL语句写法有问题,我举几个常见的坑,第一个坑:慎用‘SELECT ’,你需要什么字段,就查什么字段,你想想,‘SELECT ’是把整条记录的所有数据都捞出来,如果你只需要‘姓名’和‘电话’,那把‘地址’、‘备注’这些又长又大的字段也一起查出来,网络传输和数据处理的开销就白白浪费了。”
“第二个坑:避免在索引列上使用函数或者计算,比如你有个日期索引,但你写的查询是‘WHERE YEAR(创建时间) = 2023’,这样数据库就无法直接使用‘创建时间’的索引了,因为它必须先把每条记录的‘创建时间’用YEAR函数计算一下,才能和2023比较,正确的写法应该是‘WHERE 创建时间 >= ‘2023-01-01’ AND 创建时间 < ‘2024-01-01’’。”

“第三个坑:注意‘LIKE’查询,如果你的‘LIKE’是以通配符‘%’开头的,LIKE ‘%关键字’’,那索引也会失效,因为索引是按照字段值从头开始排序的,你从中间开始匹配,索引就派不上用场了,如果可能,尽量写成‘LIKE ‘关键字%’’。”
(引用来源:视频第四章“实战:一步步优化一个慢查询”) “光说不练假把式,我们现在就来优化一个真实的慢查询,假设我们有一张百万级的用户表,现在要查‘北京’的、年龄在25到35岁之间的、最近一个月登录过的用户,只显示他们的ID和昵称。”
“最初的写法可能是:‘SELECT * FROM users WHERE city=‘北京’ AND age BETWEEN 25 AND 35 AND last_login_time > DATE_SUB(NOW(), INTERVAL 1 MONTH)’,我们用EXPLAIN一看,type是ALL,全表扫描,慢是肯定的。”

“第一步,我们不改SQL,先检查索引,发现‘city’、‘age’、‘last_login_time’这几个查询条件字段上都没有索引,那我们根据之前的原则,建立一个联合索引,idx_city_age_time’(city, age, last_login_time),因为‘city’的选择性相对较高,放在最前面。”
“第二步,改写SQL语句,把‘SELECT *’ 改成 ‘SELECT id, nickname’,只取需要的字段。”
“第三步,检查函数使用,我们的条件里没有对索引列使用函数,是OK的。”
“现在我们再用EXPLAIN检查,发现type变成了‘range’,表示使用了索引范围扫描,查询计划变好了,实际执行一下,速度从原来的十几秒变成了几十毫秒,效果非常明显。”
(引用来源:视频结尾总结) “所以你看,优化查询并不神秘,核心思路就是:第一,利用EXPLAIN工具看执行计划,找到瓶颈;第二,合理地创建和使用索引,避免全表扫描;第三,编写高效的SQL语句,避免不必要的开销,记住这些要点,多实践,你的查询速度就能快上好几个数量级,好了,今天的分享就到这,如果对你有帮助,记得三连支持一下哦!”
本文由瞿欣合于2026-01-07发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/76436.html
