我下載了Yelp數據集並將其放入MySQL,因爲我一直在使用的數據集太小而不得不考慮效率。我正試圖清除或意識到不良的SQL習慣,這將導致更大的數據集出現問題。這兩個查詢之間的效率或其他差異是什麼?
這裏是完全拉動相同的信息從數據庫中的方法有兩種:
USE yelp_db;
SELECT name, hours FROM business
LEFT JOIN hours
ON business.id = hours.business_id;
-- time taken 0,0025sec, 776071 rows returned
SELECT name, hours FROM
(SELECT name, id from business) AS b
LEFT JOIN
(SELECT hours, business_id from hours) AS h
ON b.id = h.business_id;
-- time taken 0,0015sec, 776071 rows returned
這裏是輸出的一個示例:
John's Chinese BBQ Restaurant NULL
Primal Brewery Monday|16:00-22:00
Primal Brewery Tuesday|16:00-22:00
Primal Brewery Friday|12:00-23:00
第一種方法需要3行,但似乎比採用5行的第二種方法略慢。
無論是效率還是優雅,這些方法中的哪一種都是首選,爲什麼?
像這樣的問題總是需要所有相關表的SHOW CREATE TABLE語句,以及每個查詢的EXPLAIN。另外,我會將from_hours和to_hours存儲在不同的列中。 – Strawberry
我看了一下,EXPLAIN和SHOW CREATE TABLE有一天會有用,但是輸出很大,如果有人很好奇,schema是[here](https://www.yelp.com/dataset/documentation/sql)。 – cardamom