[英]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 | |
+---------------------+---------+------+-----+---------+----------------+
如果我做這個數據庫,在這里我選擇的查詢journey
由journey.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.