2011-11-30 16 views
8

Załóżmy, że mam kwerendy MySQL z dwóch warunków:kolejność wykonywania stan w MySQL

SELECT * FROM `table` WHERE `field_1` = 1 AND `field_2` LIKE '%term%'; 

Pierwszym warunkiem jest oczywiście będzie dużo tańsze niż sekundę, więc chciałbym mieć pewność, że uruchamia się jako pierwsza, ograniczając pulę wierszy, która zostanie porównana z klauzulą ​​LIKE. Czy warunki zapytania MySQL są uruchamiane w kolejności, w jakiej są wymienione, a jeśli nie, czy istnieje sposób określania kolejności?

Odpowiedz

6

MySQL ma wewnętrzny optymalizator zapytań, który w większości przypadków zajmuje się takimi rzeczami. Zwykle nie musisz się tym martwić.

Oczywiście optymalizator zapytań nie jest niezawodny. Więc ...

Przykro mi to zrobić, ale będziesz chciał zapoznać się z EXPLAIN, jeśli podejrzewasz, że zapytanie może działać mniej wydajnie niż powinno.

http://dev.mysql.com/doc/refman/5.0/en/explain.html

+0

Nie diagnozowania konkretnego zapytania, tak rozmyślałem nad możliwością. Dzięki za wskazówkę EXPLAIN, będę musiał ją przeczytać. – wyatt

6

Optymalizator oceni warunki gdzie w celu uzna to za stosowne.

SQL jest declarative: powiesz Optymalizator co chcesz, nie jak aby to zrobić.

W języku procedural/imperative (.net, Java, php itp.), Następnie użytkownik mówi , jak wybrać i wybrał, który stan jest oceniany jako pierwszy.

Uwaga: „od lewej do prawej” ma zastosowania w pewnych wyrażeń takich jak (a+b)*c jak można się spodziewać

+1

Dokładnie, nie można również użyć kolejności wykonania warunku MySQL jako "lub warunku", w językach proceduralnych można użyć 'if (a == 1 || b == 3) ..', po 'a == 1', 'b == 3' nigdy nie zostanie wykonane. –

Powiązane problemy