[mysql] ORDER BY id NOT IN(), i filesort

0

Dlaczego zapytanie:

EXPLAIN SELECT id FROM categories ORDER BY (id NOT IN(23,34,56,788,3243,4234,4234)

...pokazuje że MySQL korzysta z filesort, skoro na kolumnę id nałożony jest index ?

Czy jest sposób, aby wykonywać to zapytanie wydajniej?

0

nie wiem jak to z mysql, ale w mssql masz coś takiego jak gęstość indeksu, to znaczy średnia ilość rekordów przypadająca na encję; im mniejsza tym lepiej. jeśli gęstość jest zbyt mała (typowo poniżej 80%), baza danych nie używa indeksu. można próbować to zmienić robiąc update na statystykach dla danej tabeli czy indeksu, lub wymusić ręcznie używanie indeksu o zbyt niskiej gęstości. ale to dla mssql - mam nadzieję, że naprowadzi Cię to na rozwiązanie problemu.

0

Czy może chodzi Ci o coś takiego jak "Moc" indeksu? PhpMyAdmin wyśwetla takie pole...

Nie mniej, czy możliwa jest taka sytuacja dla indeksu pola ID, który jest polem unikatowym itd.?

Zapytanie typu

EXPLAIN SELECT costam FROM tabela WHERE id=25

na tej tabeli pokazuje jednak, że w tym wypadku MySQL używa jednak indeksu. Nie rozumiem natomiast, dlaczego nie miał by go użyć jeżeli ID znajduje się w ORDER BY id NOT IN (...).

1 użytkowników online, w tym zalogowanych: 0, gości: 1