2015-03-01 4 views
-2

Я пытаюсь какое-то время, но не могу найти хорошее решение для оптимизации кода SQL ниже.Мой SQL-код имеет избыточную избыточность, но я не думаю о способе его оптимизации.

код работает так, как должен, но мой учитель говорит, что его можно оптимизировать, чтобы не использовать столько условий и что я злоупотребляю таблицами.

как я могу это оптимизировать? с внутренним соединением?

SELECT b.Namn  AS Biograf, 
     s.Namn  AS Salong, 
     fo.Starttid AS Starttid, 
     fi.Titel  AS Film, 
     fi.Längd  AS Längd, 
     (fi.Grundpris - fo.Prissänkning) AS Pris 
FROM Biograf b, 
    Salong s, 
    Föreställning fo, 
    Film fi 
WHERE b.BiografID = s.Biograf 
     AND s.SalongsID IN 
     (
     SELECT Salong 
     FROM Föreställning 
     WHERE FöreställningID IN 
     (
      SELECT FöreställningID 
      FROM Föreställning 
      WHERE (DATEDIFF('d',Starttid,'2014-11-23') = 0) 
      AND Salong IN 
      (
       SELECT SalongsID 
       FROM Salong 
       WHERE Biograf IN 
       (
       SELECT BiografID 
       FROM Biograf 
       WHERE Stad=2 
      ) 
     ) 
    ) 
) 
AND fo.Salong = s.SalongsID 
AND fo.FöreställningID 
IN 
(
    SELECT FöreställningID 
    FROM Föreställning 
    WHERE (DATEDIFF('d',Starttid,'2014-11-23') = 0) 
    AND Salong IN 
     (
     SELECT SalongsID 
     FROM Salong 
     WHERE Biograf IN 
     (
      SELECT BiografID 
      FROM Biograf 
      WHERE Stad=2 
     ) 
    ) 
) 
AND fo.Film = fi.FilmID 
+0

Этот вопрос идеально подходит на http://codereview.stackexchange.com/ –

+0

Можно ли начать с нуля? – Strawberry

+0

Мой шведский плохой ;-) но у вас, кажется, есть столы кинотеатров, салонов (экранов?), Спектакли и фильмы. Итак, давайте начнем с этого. – Strawberry

ответ

0

Turn Foo IN (SELECT FooID FROM FooTbl WHERE ...) в JOIN FooTbl ON Foo = FooID WHERE .... Затем проверьте наличие избыточных JOIN.

Если это тип DATE, поверните WHERE (DATEDIFF('d',Starttid,'2014-11-23') = 0) в WHERE Starttid = '2014-11-23'. Если это DATETIME, используйте диапазон.