我下载了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