MySQL-Abfrage sehr langsam (Faktor 300)
MySQL Abfrage sehr langsam sobald in 2 verknüpften Tabellen gesucht wird.
Habe 2 Tabellen A und B. Die Datensätze lassen sich über eine ID verknüpfen. In beiden Tabellen soll je ein Feld nach einem string durchsucht werden.
Meine SQL-Abfrage sieht so aus:
SELECT `name` , `B`.`WERT2`
FROM `A`
LEFT JOIN `B` ON `A`.`id` = `B`.`id`
WHERE `A`.`name` LIKE '%test3%'
OR `B`.`WERT2` LIKE '%test3%'
In den Tabellen sind jeweils 1600 Datensätze. Die Abfrage dauert 7,8 Sekunden!!!!!!
Sobald ich die Prüfung
"OR `B`.`WERT2` LIKE '%test3%'"
weg lasse ist die abfrage 300mal so schnell fertig (0,026 sek) wie mit der zusätzlichen abfrage.
auch wenn ich den ersten teil der WHERE Abfrage weg lasse, also den Teil:
"`A`.`name` LIKE '%test3%' "
ist es ca. 300mal schneller als mit beiden Abprüfungen.
Hat jemand ne Idee, wie ich die Abfrage mit beiden Abprüfungen performanter hin bekommen kann?
Vielen dank schonmal!
Gruß,
Christopher
Habe 2 Tabellen A und B. Die Datensätze lassen sich über eine ID verknüpfen. In beiden Tabellen soll je ein Feld nach einem string durchsucht werden.
Meine SQL-Abfrage sieht so aus:
SELECT `name` , `B`.`WERT2`
FROM `A`
LEFT JOIN `B` ON `A`.`id` = `B`.`id`
WHERE `A`.`name` LIKE '%test3%'
OR `B`.`WERT2` LIKE '%test3%'
In den Tabellen sind jeweils 1600 Datensätze. Die Abfrage dauert 7,8 Sekunden!!!!!!
Sobald ich die Prüfung
"OR `B`.`WERT2` LIKE '%test3%'"
weg lasse ist die abfrage 300mal so schnell fertig (0,026 sek) wie mit der zusätzlichen abfrage.
auch wenn ich den ersten teil der WHERE Abfrage weg lasse, also den Teil:
"`A`.`name` LIKE '%test3%' "
ist es ca. 300mal schneller als mit beiden Abprüfungen.
Hat jemand ne Idee, wie ich die Abfrage mit beiden Abprüfungen performanter hin bekommen kann?
Vielen dank schonmal!
Gruß,
Christopher
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100345
Url: https://administrator.de/contentid/100345
Ausgedruckt am: 22.11.2024 um 20:11 Uhr
6 Kommentare
Neuester Kommentar
Moin Chris-U,
kann doch wohl nicht sein, dass ein Suchwert mal in "A.Name" und mal in "B.Wert2" stehen darf..
Aber das wolltest Du wahrscheinlich nicht wissen...
Idee 2
Grüße
Biber
Hat jemand ne Idee, wie ich die Abfrage mit beiden Abprüfungen performanter hin bekommen kann?
Idee 1: Redesign.kann doch wohl nicht sein, dass ein Suchwert mal in "A.Name" und mal in "B.Wert2" stehen darf..
Aber das wolltest Du wahrscheinlich nicht wissen...
Idee 2
SELECT 'A'.`name` , `B`.`WERT2`
FROM `A`
LEFT JOIN `B` ON `A`.`id` = `B`.`id`
WHERE `A`.`name`|| B.Wert2 LIKE '%test3%'
Grüße
Biber
hallo wie wäre es denn mit Indizies über die Spalten A.Name und B.Wert ?
Da es sich ja nur um Strings handeln sollte,......
http://dev.mysql.com/doc/refman/5.1/de/mysql-indexes.html
Aber im allgemeinen, überleg dir ein Redesign der DB hab selber solch furchtbar betreuen müssen, dass geht auf Dauer schief.
grüße
Da es sich ja nur um Strings handeln sollte,......
http://dev.mysql.com/doc/refman/5.1/de/mysql-indexes.html
Aber im allgemeinen, überleg dir ein Redesign der DB hab selber solch furchtbar betreuen müssen, dass geht auf Dauer schief.
grüße