Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

MySQL-Abfrage sehr langsam (Faktor 300)

Frage Entwicklung Datenbanken

Mitglied: Chris-U

Chris-U (Level 1) - Jetzt verbinden

27.10.2008, aktualisiert 30.10.2008, 8205 Aufrufe, 6 Kommentare

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
Mitglied: Biber
27.10.2008 um 15:35 Uhr
Moin Chris-U,

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
01.
SELECT 'A'.`name` , `B`.`WERT2` 
02.
FROM `A`  
03.
LEFT JOIN `B` ON `A`.`id` = `B`.`id`  
04.
WHERE `A`.`name`|| B.Wert2 LIKE '%test3%' 
Grüße
Biber
Bitte warten ..
Mitglied: Chris-U
27.10.2008 um 16:55 Uhr
Hi und danke für die schnelle Antwort!

Idee 1 geht leider nicht. Es handelt sich bei der Abfrage um eine Suchfunktion in einem Onlineshop wo mehrere Felder vom Artikelstamm geprüft werden müssen, z.b. Art-Nr Art-Bezeichnung, Beschreibung usw... Habe den Beispielcode oben stark vereinfacht und in der Form auch getsetet.

Idee 2 habe ich probiert, leider kein Erfolg, ist genauso langsam wie vorher.
Problem besteht wohl, wenn ich in 2 versch Tabellen suche.

Vllt gibts ja noch ein paar gute Vorschläge!

Schönen Feierabend!

Christopher
Bitte warten ..
Mitglied: Biber
27.10.2008 um 18:15 Uhr
Moin Chris-U,

kannst Du mal zum Spass die A.ID mit in die Select-Feldliste aufnehmen (zusätzlich zu "name" und "wert2") und prüfen, ob es Auswirkungen auf die Performance hat?

A.ID und B.ID sind doch auch die PKs der Tabellen A und B?

Grüße
Biber
Bitte warten ..
Mitglied: Chris-U
28.10.2008 um 08:57 Uhr
Werd ich probieren, komme aber erst heute am späten nachmittag oder morgen dazu, da ich heute außer haus sein werde.
Würde mich auch über noch mehr vorschläge freuen.

Habe heute schon verucht das mit einem Subselect zu lösen, aber hatte noch ein Syntax-Problem^^
Bitte warten ..
Mitglied: Chris-U
29.10.2008 um 11:38 Uhr
@Biber: hat leider nicht geholfen

Für den Augenblick habe ich eine Lösung gefunden, die für meine Bedürfnisse ausreicht, aber das Problem eigentlich nicht generell behebt.

In meinem Fall existiert zu jedem Datensatz aus Tabelle A genau ein Datensatz in Tabelle B.
Ich habe den LEFT JOIN zu einem einfachen JOIN gemacht und schon ist die Abfrage wieder flott.

Allerdings kann man bei der Problemstellung nicht immer davon ausgehen dass eine 1:1 Zuordnung möglich ist. Rein von der Logik her gesehen müsste auch ich in meinem Fall einen LEFT JOIN verwenden. Nur durch andere Umstände ergibt sich bei mir der Sonderfall, dass eine 1:1 Zuordnung möglich ist.

Ich kennzeichne das Thema noch nicht als gelöst, da noch keine Lösung gefunden wurde, den LEFT JOIN zu beschleunigen.

In meinem Sonderfall wird auch in beiden durchsuchten Feldern nach dem gleichen String gesucht, daher ist es auch denkbar mit:
WHERE concat(`A`.`name`, `B`.`Wert2`) LIKE "%test3%"
den string zu suchen. Auch concat arbeitet sehr schnell, aber kann andere Probleme mit sich bringen und funktioniert auch nur in meinem Sonderfall.

Es sind also noch weitere Lösungen gesucht.

Grüße,
Christopher
Bitte warten ..
Mitglied: godlie
30.10.2008 um 16:12 Uhr
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
Bitte warten ..
Ähnliche Inhalte
Datenbanken
MYSQL Abfrage
gelöst Frage von datadexxDatenbanken20 Kommentare

Halo an alle MySQL Spezialisten! Wie kann ich denn am besten folgende Werte abfragen und berechnen? Ausgang für die ...

Datenbanken
MySQL Abfrage für eine Umsatzauswertung kombinieren
gelöst Frage von RedBullmachtfitDatenbanken2 Kommentare

Hallo zusammen, ich möchte Kundenumsätze aus einer MySQL (v5.6, Windows) Datenbank ziehen. Ich komme mit der Struktur jedoch nicht ...

PHP
PHP MySQL Abfrage aus Datenbank
Frage von Lost144PHP12 Kommentare

Hallo, Ich habe in einer Datenbank daten über VM's stehen. Angaben wie hostname,adresse, serverat usw. Wie kann ich in ...

Datenbanken
MYSQL Abfrage bereitet mir Probleme
gelöst Frage von datadexxDatenbanken43 Kommentare

Hallo Leute, ich habe wieder ein Problem mit einer SQL Abfrage. Ich habe eine Tabelle die nennt sich pbooking, ...

Neue Wissensbeiträge
Microsoft Office

Office 2010 Starter erneut auf einer frischen Windows-Version installieren

Tipp von Lochkartenstanzer vor 22 StundenMicrosoft Office8 Kommentare

Moin, vor ein paar Tagen schlug bei mir ein Kunde auf, der sein Widnows 7 geschrottet und es inklusive ...

Datenbanken

Upgrade MongoDB 3.4 auf 3.6

Erfahrungsbericht von Frank vor 1 TagDatenbanken

Seit kurzem gibt es das 3.6 Update für die MongoDB: Sicherheit, das Sortieren, Aggregation und auch die Performance wurde ...

SAN, NAS, DAS

Backdoor Zugang und Upload-Bug in vielen Western Digital MyCloud Geräten

Information von Frank vor 1 TagSAN, NAS, DAS2 Kommentare

James Bercegay von der Firma Gulftech hat die Fehler an Western Digital gemeldet und das Unternehmen stellt bereits ein ...

Microsoft Office

Outlook 2016 - Beim Weiterleiten keine PDF Anhänge mehr - KB4011626 entfernen

Erfahrungsbericht von Deepsys vor 1 TagMicrosoft Office3 Kommentare

Wenn ihr feststellt das ihr beim Weiterleiten von E-Mails keine PDF Anhänge mehr versendent, dann dankt Microsoft. Diese tolle ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

iOS
Einladung vom iphone kalender
Frage von jensgebkeniOS15 Kommentare

Hallo Gemeinschaft, folgendes Problem - immer wenn ich von meinem Iphone einen Termin einztrage und diesem Termin Teilnehmer zuweise, ...

Windows Netzwerk
Drucker isolieren in Windows Domäne
gelöst Frage von lcer00Windows Netzwerk14 Kommentare

Hallo zusammen, habe eine Windows-AD (2012R2) in der es einen Druckerserver gibt. Mittlerweile verliere ich das Vertrauen in die ...

Drucker und Scanner
Gesucht DIN A3 Drucker
Frage von NebellichtDrucker und Scanner14 Kommentare

Hallo, ich möchte einen neuen DIN A3 Drucker kaufen. Um ab und zu, ca. 1 mal die Woche Farbausdrucke ...