Планът на заявката за OR
Случаят изглежда показва, че MySQL
наистина използва индекси, така че очевидно да, може да го направи, поне в този случай. Това изглежда напълно разумно, защото има индекс на seen
и id
е PK.
Ако "логическите и разумни обяснения" са в противоречие с реалността, тогава е безопасно да се предположи, че логиката е погрешна или обясненията са погрешни или неприложими. Известно е, че производителността е трудно да се предвиди; тестването на производителността е от съществено значение там, където скоростта е важна.
Трябва да използвате този, който тества по-бързо при въвеждане, което адекватно моделира това, което програмата ще види в реална употреба.
Имайте предвид обаче, че двете ви заявки не са семантично еквивалентни:ако редът с id = 5204
също има seen = 3
след това OR
заявката ще го върне веднъж, но UNION ALL
заявката ще го върне два пъти. Безсмислено е да избирате между правилен код и неправилен код на всякаква основа, различна от коя е правилната.