繁体   English   中英

联接表上的索引是否用于多对多关系?

[英]Are indexes on the join table used in many-to-many relationships?

假设我有一个数据库,其中包含3个描述公交时刻表的表:

journey
+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| id           | int(11)     | NO   | PRI | NULL    | auto_increment |
| start        | time        | NO   |     | NULL    |                |
| end          | time        | NO   |     | NULL    |                |
| route_id     | int(11)     | NO   | MUL | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

operating_days
+------------+---------+------+-----+---------+----------------+
| Field      | Type    | Null | Key | Default | Extra          |
+------------+---------+------+-----+---------+----------------+
| id         | int(11) | NO   | PRI | NULL    | auto_increment |
| start_date | date    | NO   | MUL | NULL    |                |
| end_date   | date    | NO   |     | NULL    |                |
+------------+---------+------+-----+---------+----------------+

journey_operating_days
+---------------------+---------+------+-----+---------+----------------+
| Field               | Type    | Null | Key | Default | Extra          |
+---------------------+---------+------+-----+---------+----------------+
| id                  | int(11) | NO   | PRI | NULL    | auto_increment |
| journey_id          | int(11) | NO   | MUL | NULL    |                |
| operating_days_id   | int(11) | NO   | MUL | NULL    |                |
+---------------------+---------+------+-----+---------+----------------+

如果我做这个数据库,在这里我选择的查询journeyjourney.id并从所有相关领域加入operating_days和ORDER BY operating_days.start_date ,将在列的索引operating_days.start_date用于排序他们还是会对于数据库引擎不可用?

这涉及MySQL和/或PostgreSQL引擎。

对于postgresql,答案取决于它

查询优化器一直在工作,执行计划取决于表大小,where子句的选择性以及许多其他因素。

人们经常会发现:他们创建索引,但查询中不使用该索引。 原因:对于数据库而言,顺序扫描比访问索引然后访问数据便宜。

查询优化是专用邮件列表的主题。

这是与SQL相关的答案,并非特定于任何RDBMS。 索引主要用于快速获取数据(通过在文件系统中存储有关数据位置的信息)将数据移入/移出内存。 排序(通常)是在提取所有数据之后进行的,因此在大多数情况下,在对数据进行排序/排序时不会使用索引。 因为它已经被拉出数据库了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM