请教问题: 关于数据库的主键和查询

2018-09-02 08:22:43 +08:00
 initialdp
对数据库了解不多,有几个问题想咨询一下 V 友:
( 1 ) 如果某个 table 的 primary key 是( A, B ),即由两个个字段组成。如果查询时仅仅查询其中一个字段,比如( where A=xxx ), 这种情况下,为优化查询,还需要单独对字段 A 做索引吗?

( 2 )如果*分别*对 C 和 D 做了索引,某查询需要同时查询 C 和 D,比如( where C=xxx and D=yyy ),此时还需要对 C 和 D 的组合做索引吗?比如( index (C, D))?

谢谢!
1822 次点击
所在节点    问与答
5 条回复
dream7758522
2018-09-02 09:08:51 +08:00
第一个不知道,第二个需要。c 和 d 分别建立索引,c.d 进行组合查询,数据库会随机用 c 或者 d 的索引,不会两个索引一起用。因此组合查询需要建立组合索引
initialdp
2018-09-02 09:20:51 +08:00
@dream7758522 谢谢!
zjuhwc
2018-09-02 10:17:08 +08:00
第一个不需要,索引是前缀索引,联合索引 ( A, B )相当于索引 A 和索引 ( A+B ),查 a 无需新建,查 B 需要
initialdp
2018-09-02 11:02:55 +08:00
@zjuhwc 谢谢! 那如果联合索引是( A, B, C ),是否就相当于索引 A 和索引( A+B+C )? 此时如果单独查询 B 或者 C,都需要另外建索引优化?
sunnyadamm
2018-09-02 11:46:46 +08:00
第一个不要,第二个要

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485301

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX