phpbar.de logo

Mailinglisten-Archive

Technisches =?iso-8859-1?Q?=FCber?= WHERE

Technisches über WHERE

Elmar Haneke mysql_(at)_lists.phpcenter.de
Fri, 22 Jun 2001 11:09:16 +0200


Matthias Lampert wrote:


> ... WHERE authorname = 'Schulze'  AND
>           authorfirstname =  'Peter'  AND
>           words LIKE "%Das ist die Rache für meinen Bruder!%"
> 
> oder so:
> 
>     WHERE words LIKE "%Das ist die Rache für meinen Bruder!%"
>          AND authorname = 'Schulze'
>          AND authorfirstname = 'Peter'

Solange keine Index-Strukturen definiert sind, ist das völlig egal.

Ein "Optimierer", der bei Vorhandensein von Indexen auf "authorname"
und "authorfirstname" nicht beide Varianten so auswertet, daß zunächst
zumindestens einer der Indices genutzt wird, ist seinen Namen nicht
Wert.

Du solltest die verschiedenen Varianten mal mit Explain analyiseren,
dies sollte aber an einer richtigen Datenbank erfolgen, da z.B. die
Anzahl der unterschiedlichen Attributwerte in die Optimierung eingehen
könnte.

Zur Ausführung fallen mir zwei Schemata ein:

a) Verwendung von einem Index:

   Es werden die Datensätze geleden, bei denen z.B. authorname paßt, 
   die überigen Kriterien werden dann einzeln an den Datensätzen 
   abgeprüft

b) Verwendung zweier Indices:

   Es werden aus den Indices "authorname" und "authorfirstname"
   die passenden Datensatznummern gelesen und die Schnittmenge 
   gebildet. Anschließend werden die Datensätze der Schnittmenge
   aus der DB geholt um das LIKE auszuführen.

Zur Ausführung des LIKE ist hier im übnerigen kein Index anwendbar,
das muß immer am Datensatz entschieden werden.

Elmar

---
!!NEU!!
Fragen und Antworten zu MySQL und dieser Liste unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive