sql语句索引查询用法

  发布时间:2026-10-17 06:21:02   作者:玩站小弟   我要评论
索引是数据库加速查询的利器,但用不对反而拖慢性能。我见过太多人建了索引却不生效,或者干脆滥用索引把写入搞得奇慢无比。下面直接说用法。 最基础的场景是等值查询。假设你有张用户表,经常用`where us 。

索引是语引查数据库加速查询的利器,但用不对反而拖慢性能。句索我见过太多人建了索引却不生效,询用或者干脆滥用索引把写入搞得奇慢无比。语引查下面直接说用法。句索

最基础的询用场景是等值查询。假设你有张用户表,语引查经常用`where user_id = 10086`来查数据。句索这时候给user_id加个普通索引,询用执行计划就会走索引扫描,语引查从全表几百万行里挑出那一行,句索速度从秒级降到毫秒级。询用写法很简单:`create index idx_user_id on 语引查user(user_id)`。查询语句不用改,句索数据库自动会选索引。询用

但索引不是万能的。有一次我排查慢查询,发现`where name like '%张三%'`这种模糊匹配,即使name上有索引也没用。因为前导通配符让数据库无法利用B+树的排序特性,只能全表扫。改成`where name like '张三%'`就能走索引了。这是很多人栽过的坑。

复合索引的顺序很关键。比如你要按`status`和`created_at`两个条件筛选订单,建索引时得把等值条件放前面,范围条件放后面。`create index idx_status_time on orders(status, created_at)`。如果你反过来建,查询`where status=1 and created_at > '2024-01-01'`时,索引只能用到status部分,created_at部分就浪费了。这个细节直接影响查询效率,我见过线上接口因为索引顺序不对,响应时间从200ms飙到3秒。

覆盖索引是优化神器。如果你查询只需要返回少数几个字段,比如只select id和name,那就建一个包含这两个字段的索引,查询时连回表都省了。`create index idx_name_id on user(name, id)`。这种情况下执行计划显示的是Using index,而不是Using index condition。别小看这个差异,高并发场景下能减少大量磁盘IO。

索引失效的情况得记牢。对索引列做函数运算会失效,比如`where date(created_at) = '2024-01-01'`,即使created_at有索引也不走。应该改成范围查询`where created_at >= '2024-01-01' and created_at < '2024-01-02'`。隐式类型转换也坑人,`where phone = 13800138000`,如果phone是varchar类型,数字会被转成字符串再比较,索引照样失效。得写成`phone = '13800138000'`。

还有联合查询里的索引利用。两个表join,连接字段必须都建索引,否则嵌套循环会变成全表对全表。我优化过一个报表查询,给关联字段补上索引后,执行时间从45秒降到0.8秒,那个开发同事当时就愣住了。

再说说排序。order by的字段如果有索引,可以避免filesort。但前提是排序方向和索引顺序一致,或者排序字段在where条件里被前导使用了。比如`where status=1 order by created_at`,如果索引是(status, created_at),那排序直接走索引顺序,不用额外排序。要是`order by created_at, status`,索引就帮不上忙了。

最后提醒一句,索引不是越多越好。每个索引都会拖慢insert和update,因为要同步维护索引结构。我见过有人给一张表建了8个索引,结果写入性能惨不忍睹。一般单表索引控制在5个以内,把高频查询的字段组合好就够了。删除那些长期没被使用的冗余索引,用`show index from table_name`看看基数,基数太低的列比如性别字段,建索引纯属浪费空间。

实际调优时,先explain看看执行计划,type字段至少是ref或range,如果是all就得加索引。rows字段估算扫描行数,跟实际返回行数差距过大说明统计信息过期,跑一下analyze table就好。索引这东西,用对了是加速器,用错了是负担,关键还是得多看执行计划。

  • Tag:

相关文章

  • 168飞艇开奖最新网官网

    168飞艇开奖最新网官网,这名字听着就带劲。但说句实在话,我盯了它三天三夜,发现这网站真正让人上头的不是开奖号码,而是它那套堪称行为艺术般的界面设计。 打开首页,满屏金色大字在黑色背景上蹦迪,活像九十
    2026-10-17
  • 疫情防控责任追究和漏洞倒查追责制度

    2022年春天,上海某区疾控中心流调组组长李梅化名)在凌晨三点接到一通电话——辖区内一家养老院出现聚集性疫情,但系统里的密接名单却比实际少了17人。三天后,这17人中有9人确诊,其中2位老人发展为重症
    2026-10-17
  • 信用卡被国外盗刷怎么办

    凌晨三点,手机在床头柜上震个不停。我迷迷糊糊摸过来,看到的是十几条银行交易提醒——每一笔都是99.99美元,从洛杉矶的一家电子产品商城刷出。前后不过二十分钟,八千多块人民币就这么没了。 信用卡被境外盗
    2026-10-17
  • 网页底层代码怎么打开

    在浏览器里随便打开一个网页,按下键盘上的 Ctrl+UMac 用户按 Option+Command+U),你就能看到一堆密密麻麻的代码。这就是网页的底层——HTML、CSS 和 JavaScript
    2026-10-17
  • 004航空母何时下水视频

    军迷圈里炸锅了。大连造船厂的干船坞里,那艘被苫布裹了三年的庞然大物,突然开始拆除部分脚手架。有人拍到船艏的舷号位置已经刷上底漆,数字轮廓隐约可见——不是16,也不是17。那是004。 具体哪天入水?
    2026-10-17
  • 硕士研究生导师信息表

    张建国把那张A4纸从抽屉里抽出来时,纸边已经卷了。上面是他2019年填的《硕士研究生导师信息表》,铅字印的表格,手写补了几处。他看了两遍,又放回去。那张表上写着:研究方向,光催化材料;代表性论文,17
    2026-10-17

最新评论