Diskuze: chování dotazu like (mariadb)
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
neměl by být, jelikož ty podmínkuješ jen to, že id musí být větší
než 50 (v obou případech).
Typ like by fungoval takto:
like '%x' -> řetězec končí na x
like 'x%' -> řetězec začíná na x
V tvém případě je to použité úplně zbytečně.
Raději jsem to i vyzkoušel a výsledek je úplně stejný.
Snad jsem pomohl, roverjedla.
Kdyby nebylo okoli like něco jasné tak tady je to velmi jednoduše
vysvětlené:
w3
Souhlasím s tím že je použito zbytečně (což jsem zmiňoval již na
začátku), ale na uvedeném odkazu je právě vysvětlené jak se to chová s
textem. Mě zajímá, co se stane když se to použije bez jakéhokoliv
dalšího znaku.
Jestli DB pozná že to je zbytečné hledat a hledá stejně jako ve 2), nebo
jestli se všechny pole typ testujou na přítomnost (třeba i prázdného
řetězce).
Ono hodně záleží na tom, jestli má DB 350 záznamů, nebo milion.
Hledání podle textu je vždycky malinko pomalejší a počet záznamů dobu
zpracování dotazu pak může výrazně ovlivnit...
EDIT: Asi by to bylo potřeba otestovat na hooodně velkém počtu
záznamů...
Mysql je poměrně hloupý, takže optimizer ten zbytečný like nedá pryč a hledá odpovídající záznamy.
Nemám nainstalovanou Mysql databázi, takže to nemůžu vyzkoušet. Ale otestuj si, jestli ti ta verze dotazu kde máš like nevyřadí z výsledku záznamy, kde je ve sloupci "typ" null. Nicméně si myslím že při větším počtu záznamů by snížení výkonu mohlo být znát.
Zobrazeno 7 zpráv z 7.