Witam
czy będzie jakaś różnica w szybkośći działania, jesli w predykacie WHERE podam, tak:
WHERE (my_data = 'A' OR my_data = 'B' OR my_data = 'C' OR my_data = 'D')
zamiast :
WHERE my_data IN ('A', 'B', 'C', 'D')
Witam
czy będzie jakaś różnica w szybkośći działania, jesli w predykacie WHERE podam, tak:
WHERE (my_data = 'A' OR my_data = 'B' OR my_data = 'C' OR my_data = 'D')
zamiast :
WHERE my_data IN ('A', 'B', 'C', 'D')
Na 99% nie będzie do optymalizator kosztowy sprowadzi to do takiego samego "kodu" wynikowego.
zawsze mozesz sprobowac zrobic benchmarka, i wykonac to zapytanie na takich samych danych (np dla miliona rekordow), ale zapewne jest tak jak pisze @Shalom
w mysql nie ma czegoś na wzór postgresowego EXPLAIN ?
Możesz porównać query plan dla obu zapytań. Dzięki temu poznasz dokładne operacje, które zostaną wykonane dla twojego zapytania.
https://www.simple-talk.com/sql/performance/execution-plan-basics/
https://dev.mysql.com/doc/refman/5.5/en/execution-plan-information.html
https://www.sqlite.org/eqp.html#section_1
http://sqlblog.com/blogs/paul_white/archive/2012/04/28/query-optimizer-deep-dive-part-1.aspx
http://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm#g42927
Na 99% nie będzie do optymalizator kosztowy sprowadzi to do takiego samego "kodu" wynikowego.
W przypadku MySQL nie byłbym taki pewien. Nawet nie zdziwiłbym się, jakby działało dla dwóch ORów, a dla trzech już nie :D
To trzeba sprawdzić doświadczalnie. Na pewno SQLite tego by nie zoptymalizował i zapytanie z IN byłoby szybsze. MySQL nie wiem.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.