A.L.E.C pisze:
Paweł Rohde wrote:
Udało mi się wyczytać w manualu, że przy takim joinie where jest brany pod uwagę tylko dla lewej tablicy.
Nie chodzi mi resoultseta tylko o wyciąganie danych z tablicy.
A zobacz co zrobi jak usuniesz słówko LEFT, jest ono tutaj zbędne. Kolejność tabel też nie powinna tutaj mieć znaczenia. Jeśli baza nie potrafi tego optymalnie wykonać to jest to błąd bazy (jej konfiguracji?).
Konfigurację już nawet wziołem identiko ze starego serwera, jeszcze zastanawiam się czy jakieś aparmory i inne nowości w stosunku do slacka nie robią wiochy.
Chociaż wyciągnięte czyste zapytanie z trace'a i puszczone z mysql konsoli wykonywało się dłużej jak wyżej. Tak więc tak jak piszesz, chyba jest to kwestia wersji, jeszcze muszę sprawdzić phpinfo na obu serwerach, może znajdę coś ciekawego.
Być może problemem jest tutaj widok. Ktoś już zgłaszał podobny problem, ale ten ktoś miał InnoDB. Sprawdź co baza zrobi jak zamienisz customersview na customers.
Wystarczy że odwrócę kolejność i jest szybko. Zwykły join też działa dobrze.
O! jeszcze jedna sprawa. Założyłem index na deleted i teraz mi wybiera wszystko po indexie:
+----+--------------------+-------+--------+-----------------------------------------------------------------------+-----------------+---------+----------------------------------+------+----------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+--------------------+-------+--------+-----------------------------------------------------------------------+-----------------+---------+----------------------------------+------+----------------------------------------------+ | 1 | PRIMARY | c | ref | idx_deleted | idx_deleted | 1 | const | 653 | Using where; Using temporary; Using filesort | | 1 | PRIMARY | cash | ref | customerid | customerid | 4 | lms2.c.id | 46 | | | 3 | DEPENDENT SUBQUERY | e | index | NULL | userid | 8 | NULL | 30 | Using where; Using index | | 3 | DEPENDENT SUBQUERY | a | eq_ref | customergroupid,customergroupid_2,customergroupid_3,customergroupid_4 | customergroupid | 8 | lms2.e.customergroupid,lms2.c.id | 1 | Using where; Using index | +----+--------------------+-------+--------+-----------------------------------------------------------------------+-----------------+---------+----------------------------------+------+----------------------------------------------+
I w tym momencie ilość zapytań skróciła się do 3. (odczytuję ze status przed zapytaniem i po, dla przypomnienia bez indeksu było tego 1211337
Ot opisuję przygodę, może się komuś przyda....