两列上的MySQL主键是否有助于第二列上的查询?

Jos*_*osh 5 mysql indexing optimization many-to-many

我有两节课,FooBar.每个Bar都包含很多Foos.Foos可以是多个Bars但每个Foo只能在给定的Bar一次.我有以下表结构:

CREATE TABLE `bar_foos` (
   `bar_id` INT UNSIGNED NOT NULL,
   `foo_id` INT UNSIGNED NOT NULL,
   PRIMARY KEY ( `bar_id` , `foo_id` )
);
Run Code Online (Sandbox Code Playgroud)

这应该适用于我的多对多关系.我的问题是,如果我希望我的代码能够检查是否有Foo任何Bars 正在使用,IE告诉用户"这个Foo不能被删除,因为它正被5条棒使用",是PRIMARY KEY吗? index帮我查询一下

SELECT * FROM `bar_foos` WHERE `foo_id`=2
Run Code Online (Sandbox Code Playgroud)

要么

SELECT COUNT(*) FROM `bar_foos` WHERE `foo_id`=2
Run Code Online (Sandbox Code Playgroud)

或者,我是否需要单独使用单独的索引foo_id

Dan*_*man 6

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

"如果表具有多列索引,则优化程序可以使用索引的任何最左前缀来查找行.例如,如果在(col1,col2,col3)上有三列索引,则已编制索引搜索(col1),(col1,col2)和(col1,col2,col3)的功能.

如果列不构成索引的最左前缀,MySQL就无法使用索引."

  • 所以他需要扭转他的指数策略? (2认同)