0
我有2個表 - >公寓和有效性。MySQL - 需要更好的查詢解決方案,極端加載時間
在表中的公寓大約有一個公寓的所有信息。在表格可用性中,有關於公寓在未來365天的可用性的所有信息。
表公寓:
id, name
實施例:
1, Apartment 1
2, Apartment 2
表可用性:
id, apartment_id, date, status
例子:
1, 1, 2017-06-01, free
2, 1, 2017-06-02, booked
3, 1, 2017-06-03, free
4, 1, 2017-06-04, free
5, 1, 2017-06-05, free
...
6, 2, 2017-06-05, free
7, 2, 2017-06-05, free
8, 2, 2017-06-05, free
9, 2, 2017-06-05, booked
10, 2, 2017-06-05, free
...
現在我想尋找免費的公寓,每週在多個日期範圍,如:
SELECT apartments where id in (
SELECT apartment_id
FROM availabilities
WHERE EXISTS (
SELECT apartment_id
FROM availabilities as a
WHERE availabilities.apartment_id = a.apartment_id
AND date >= "2017-06-01"
AND date < "2017-06-08"
AND status = "free"
GROUP BY apartment_id
HAVING COUNT(apartment_id) = DATEDIFF("2017-06-08", "2017-06-01"))
OR EXISTS (
SELECT apartment_id
FROM availabilities as a
WHERE availabilities.apartment_id = a.apartment_id
AND date >= "2017-06-02"
AND date < "2017-06-09"
AND status = "free"
GROUP BY apartment_id HAVING COUNT(apartment_id) = DATEDIFF("2017-06-09", "2017-06-02"))`
這應該查找在某個日期範圍內的所有可能性一週( 2017年6月1日 - 2017年6月30日)
我的問題在這裏,我們得到了很多的公寓和這個查詢有一個極端的加載時間。
一個更好的解決方案的任何想法?
可以做什麼'DESCRIBE {} table_name的'和'EXPLAIN {} Your_Long_SQL_QUERY'和'SHOW指數從{TABLE_NAME}'和後的結果? – Dimi
有多少'OR EXISTS'部分會來...(28?),因爲主查詢沒有用這個語法關閉? '01 - 08'和'02 - 09'之後會有更多?由於'的2017年6月1日 - 解釋descripe的2017-06-30' – JustOnUnderMillions
結果,我可以張貼明天@Dimi – Mario