MySQL多列查询优化:已建f1、f2索引是否需再建f3索引?
关于SQL索引的问题解答
你的查询语句:
select * from table where f1='f1' and f2='f2' and f3='f3'
核心结论
- 线性扫描500行的速度完全足够快。数据库对几百行数据的内存级扫描耗时可以忽略不计,不会成为查询的性能瓶颈。
- 不需要单独为f3建立索引。更合理的优化方向是把f3追加到现有联合索引的末尾,创建
(f1, f2, f3)的联合索引:- 如果查询仅需返回f1、f2、f3三列,这会成为覆盖索引,数据库无需回表查询原数据,直接从索引就能获取结果,效率最大化。
- 如果是
select *需要返回全列,虽然覆盖索引的优势减弱,但这个联合索引依然能直接定位到符合三个条件的数据行,比先靠f1/f2筛选再扫f3的方式更高效。
当然,如果当前查询性能已经完全满足需求,甚至连这个联合索引优化都可以不用做——毕竟500行的扫描成本实在太低。
内容的提问来源于stack exchange,提问作者LookIntoEast
相关产品推荐
相关产品推荐

