Muszę sprawdzić plan zapytania dla następującego zapytania w MySQL za pomocą EXPLAIN.
Problemem jest jednak kolumna w klauzuli where jest binarna(16). To przewodnik.
explain select `title`,`ttext`
FROM ptip inner join user on user.id = ptip.userId
where ptip.titlehash = <whatever value>
Tutaj tytuł hash jest binarny(16), a zapytanie daje następujący błąd:
„Niemożliwe GDZIE zauważyłem po przeczytaniu tabel const”
Próbowałem używać; gdzie ptip.titlehash = BINARY('24dwdfsdf'), ale nadal to samo;
Jak uruchomić powyższe zapytanie?
2 odpowiedzi
Ok, oto jak w końcu to rozwiązałem;
SET @hs = (SELECT titlehash FROM ptip WHERE id = 5673);
EXPLAIN SELECT `title`,`ttext`
FROM ptip INNER JOIN USER ON user.id = ptip.userId
WHERE ptip.titlehash = @hs
Umieszczam wartość w zmiennej @hs, a następnie używam do wyjaśnienia. Na szczęście polecenie wyjaśniania wyjaśnia tylko wybór. Nie dba o operację SET i traktuje zmienną @hs tylko jako wartość
Niemożliwe GDZIE zauważyłem po przeczytaniu tabel const
Co to oznacza:
Const tables
oznacza, że MySQL zauważył, że tylko jeden wiersz może pasować na złączeniu. Zamiast tego, czytając to w zapytaniu, przechowuje ten wiersz w const table
Zgodnie z instrukcją MySQL:
Tabela zawiera co najwyżej jeden pasujący wiersz, który jest odczytywany na początku zapytania. Ponieważ istnieje tylko jeden wiersz, wartości z kolumny w tym wierszu mogą być traktowane przez resztę optymalizatora jako stałe. tabele const są bardzo szybkie, ponieważ są odczytywane tylko raz.
Problem
Problem, który ty masz tutaj, polega na tym, że MySQL zauważył, że w twoim sprzężeniu nie ma pasujących wierszy. Z tego powodu MySQL nie może odczytać wiersza z tabeli const i nie może rozpocząć zapytania.
Rozwiązanie
Napraw zapytanie, czy nie zwraca pustego zestawu wyników i ponownie uruchom wyjaśnienie.
Podobne pytania
Nowe pytania
mysql
MySQL to darmowy system zarządzania relacyjnymi bazami danych (RDBMS) o otwartym kodzie źródłowym, który wykorzystuje język SQL (Structured Query Language). NIE UŻYWAJ tego znacznika dla innych baz danych, takich jak SQL Server, SQLite itp. Są to różne bazy danych, które używają własnych dialektów SQL do zarządzania danymi.