数据库如何建立索引
【数据库如何建立索引】很多时候,写好了业务代码,一跑起来查询慢得像蜗牛。这时候大部分人的第一反应就是:给这张表加个索引吧。但这事儿不能瞎搞,建错了不仅不提速,反而拖垮数据库的写入性能。
说实话,索引的本质就是一本“书的目录”。没有它,数据库要查一条数据,就得在几千页、几亿行里翻个底朝天(全表扫描);有了它,它直接告诉你第几页第几行在哪。
下面把建立索引的核心逻辑和操作方式整理了一下,结合实战经验,帮你理清思路。
核心操作与索引类型速览
在实际开发中,我们常用的数据库(如 MySQL、PG、Oracle)底层大多遵循类似的语法规则。建立索引主要分两种路径:一种是建表时顺手一起建(物理结构),另一种是表建好后动态添加(结构维护)。
| 索引类型 | 常见创建语句示例 | 适用场景 | 潜在代价 |
| : | : | : | : |
| 普通单列索引 | `CREATE INDEX idx_age ON users(age);` | 针对单一字段频繁查询,如 `WHERE status = 1`。 | 占用磁盘空间;每次增删改需同步更新索引。 |
| 联合复合索引 | `CREATE INDEX idx_name_email ON users(name, email);` | 查询条件包含多个字段,且顺序匹配最左前缀原则时。 | 顺序很重要;一旦字段顺序反了可能失效;覆盖范围窄。 |
| 唯一性索引 | `CREATE UNIQUE INDEX uq_code ON orders(code);` | 保证数据不重复,通常用于订单号、手机号等关键字段。 | 插入时需检查冲突,比普通过滤多一次校验。 |
| 主键/聚簇索引 | `PRIMARY KEY (id)` (定义表时指定) | 表的主标识符,物理存储上按此顺序排列。 | 一张表只有一个;修改主键成本高;查询速度最快。 |
| 全文索引 | `FULLTEXT INDEX ft_search ON articles(content);` | 针对文本模糊搜索,比如搜索文章段落。 | 仅支持特定引擎(如 MyISAM/InnoDB);解析文本耗时。 |
为什么有时候加了索引还是慢?
很多新手容易陷入一个误区:“我加了索引,查询就一定快。”其实不然。这里有几个常被忽略的坑:
1.索引下推失效:如果查询语句里写了 `LIKE '%abc'`(以通配符开头),索引基本废了,数据库还得回到全表扫描。
2.数据类型隐式转换:明明存的是数字 `age`,查询时却用了引号 `'20'`。数据库为了对比,可能会放弃走索引,导致性能断崖下跌。
3.过度索引:不要觉得索引越多越好。每张表的索引建议控制在 5 个以内(特殊情况除外)。因为每次你写 `INSERT` 或 `UPDATE` 的时候,数据库不仅要改数据,还要同时把这五六本“目录”都改了。写入压力过大,系统整体吞吐量反而下降。
4.区分度不够:如果给性别(男/女)这种只有两个值的东西建索引,效果几乎为零。数据库发现扫一下表比对索引还快,自然就不走了。
实际建议:怎么判断该不该建?
在动手敲命令之前,先看看慢查询日志或者执行计划(`EXPLAIN`)。如果看到 `type` 是 `ALL`,说明正在全表扫描。
建索引的顺序推荐优先选高频筛选列。比如一个用户表,如果你经常按 `phone` 登录,那就给 `phone` 建唯一索引;如果是后台管理列表,经常按 `create_time` 排序分页,那么给时间字段建个普通索引能极大提升效率。
最后记住一点:索引是为了读而牺牲写。在读取密集型业务(如电商商品浏览)里,大胆建;在交易写入频繁的业务(如流水账单)里,留点余地,别把所有字段都塞满索引。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
【daisymiller故事梗概】《Daisy Miller》是美国作家亨利·詹姆斯(Henry James)于1878年发表的一部中篇小...浏览全文>>
-
【跺字怎么组词】“跺”是一个常见的汉字,读音为“duò”,在日常生活中经常出现。它通常表示用脚用力踩的动...浏览全文>>
-
【炫舞名字大全】在《QQ炫舞》这款游戏中,角色名字不仅是玩家身份的象征,更是个性与风格的体现。一个好的名...浏览全文>>
-
【寇白门的生平】寇白门,原名寇珠,字白门,是明末清初时期的一位才女,以其美貌与才华著称。她出身于一个书...浏览全文>>
-
【百度秒链怎么用】百度秒链是百度推出的一款基于区块链技术的轻量级数据存储与验证工具,旨在为用户提供快速...浏览全文>>
-
【毛衣洗涤方法】毛衣作为冬季常见的衣物,穿着舒适且保暖性好,但因其材质多样(如羊毛、腈纶、混纺等),洗...浏览全文>>
-
【闲鱼买家退款一般谁赢】在闲鱼平台上,买家和卖家之间的交易纠纷时有发生,尤其是在退款问题上。很多买家在...浏览全文>>
-
【碧有信是什么】“碧有信”是一个近年来在互联网上逐渐被关注的词汇,它并非一个广为人知的品牌或平台,而是...浏览全文>>
-
【手机软件不能更新怎么办】当手机上的某些应用无法正常更新时,可能会导致功能异常、漏洞未修复或体验下降。...浏览全文>>
-
【纯洁的意思是什么】“纯洁”是一个常见的中文词语,常用于描述人、事物或情感的纯净、无杂质状态。它在不同...浏览全文>>
