SQL Fragen...

User avatar
isotopp
RSAC
Posts: 482
Joined: 2003-08-21 10:21
Location: Berlin

Re: SQL Fragen...

Post by isotopp »

matzewe01 wrote:select a.name, b.timestamp from useraccount a, user_stats b
where lower(a.uname) = lower(b.uname)

Aber warum dauert die abfrage mit einer lower() Anweisung massiv länger als ohne.


Das ist ein Full Table Scan. In der Where-Bedingung sind keine Spaltennamen zu sehen, sondern nur Funktionsaufrufe. Mithin kann kein Index verwendet werden, da Indices ja immer auf Spalten liegen und nicht auf Funktionsresultattabellen.

Der Vergleich ist sowieso Case Insensitive, solange die Column nicht BINARY oder _cs definiert sind. Die Funktionsaufrufe sind also Unsinn.

Code: Select all

select a.name, b.timestamp from useraccount a, user_stats b where a.uname = b.uname


Diese Query hat dasselbe Ergebnis solange die uname-Columns _ci definiert sind. Es sind freistehende Spaltennamen sichtbar, Indices auf a.uname und b.uname sind hilfreich und können verwendet werden.
Top