【发布时间】:2015-03-28 21:42:20
【问题描述】:
我有一个 Movie 表、一个 Genre 表和一个 MovieGenre 表来说明电影有哪些类型。
当我试图获取至少具有目标电影共有的所有类型的电影时,django orm 提出了这个查询。
SELECT "movies_movie"."id", "movies_movie"."imdb_id", ..etc.. "movies_movie"."last_ingested_on",
COUNT("movies_movie"."id") AS "count",
COUNT("movies_moviegenre"."genre_id") AS "genres_count"
FROM "movies_movie"
LEFT OUTER JOIN "movies_moviegenre" ON ( "movies_movie"."id" = "movies_moviegenre"."movie_id" ) INNER JOIN "movies_moviegenre" T4 ON ( "movies_movie"."id" = T4."movie_id" )
INNER JOIN "movies_moviegenre" T6 ON ( "movies_movie"."id" = T6."movie_id" )
WHERE ("movies_movie"."last_ingested_on" IS NOT NULL
AND NOT ("movies_movie"."imdb_id" = 'tt0111161' )
AND "movies_movie"."type" = 'feature'
AND "movies_movie"."certification" = 'R'
AND T4."genre_id" = 1 AND T6."genre_id" = 10 )
GROUP BY "movies_movie"."id", "movies_movie"."imdb_id", "movies_movie"."movie", "movies_movie"."type", "movies_movie"."year", "movies_movie"."tagline", "movies_movie"."plot", "movies_movie"."runtime", "movies_movie"."rating", "movies_movie"."certification", "movies_movie"."budget", "movies_movie"."box_office_revenue", "movies_movie"."poster_url", "movies_movie"."trailer_url", "movies_movie"."mood_data", "movies_movie"."created_on", "movies_movie"."modified_on", "movies_movie"."last_ingested_on" HAVING COUNT("movies_moviegenre"."genre_id") >= 2
ORDER BY "count" DESC
你能看到任何可能导致它变慢的东西吗?它需要 1107.26499557 毫秒,这是不可接受的。提前致谢
【问题讨论】:
-
也许非规范化计数并将它们存储在表中并在每次添加内容时更新它们,从而使查找计数成为更简单的 SELECT 操作?
-
@MikkoOhtamaa 你是说有另一个包含列、targetmovie、movie、genreinCommonCount 的表。如果是这样,那么对于每个 targetmovie/movie 组合,该表将是巨大的(100+ 百万行)。
标签: python django postgresql