Mein Kopf dreht sich bereits davon und ich brauche deine Hilfe.MySQL - wie man große Bedingungen optimiert
MY DATABASE
- importierte CSV-Datei: 22 Spalten und 11k Reihen
- 2 Tabellen mit den gleichen Daten (beide aus der CSV erstellt)
- Added ID als PRIMÄRSCHLÜSSEL zu beiden
- Alle VARCHAR (60) Einige Spalten sind leere Strings ''
DB:
PID | CODE 1 | CODE 2 | CODE 3 | CODE 4 | CODE 5 | CODE X (up to 9) | ID
-------------------------------------------------------------------------
1 | a | b | c | | | | 1
2 | a | | b | d | | | 2
3 | x | | | | | y | 3
- DB hat 22 Spalten, aber ich bin auch nur CODE Spalten (bis zu) in denen ich in Bezug auf SQL-Anweisung interessiert sein könnte.
- Es wird nur Tabelle lesen - MyISAM-Engine dann?
Was ich tun
select PID = 1 from first table
and retrieve all PIDs from second table
IF
selected PID's column CODE 1
or
selected PID's column CODE 2 (which is b) etc (up to 9).
= any PID's CODE X
Also sollte ich nur PID 2.
edit: PID kein ID ist, es ist nur ein Beispielcode, Es könnte String sein: '002451' und ich suche nach anderen PIDs mit den gleichen CODES (zB PID1
hat code = a
also sollte es PID2
finden, weil eine seiner CODE
Spalten enthält a
)
mein Versuch
SELECT a.* FROM `TABLE1` a WHERE
(
SELECT * FROM `TABLE2` b WHERE b.`PID` = 1
AND
(
(b.`CODE 1` NOT IN ('') AND IN (a.`CODE 1`,a.`CODE 2`, A.`CODE 3`...)) OR
(b.`CODE 2` NOT IN ('') AND (a.`CODE 1`,a.`CODE 2`, A.`CODE 3`...)) OR...
ich mit großer Abfrage würde am Ende - über 81 Bedingungen. In Bezug auf die Leistung ... nun, es funktioniert nicht.
Ich weiß intuitiv, dass ich sollte:
- Verwendung INDIZES (auf CODE 1/CODE 2/CODE 3 usw.?)
- JOIN ON (aber ich bin zu blöd) - Deshalb habe ich 2 Tabellen erstellt (nehmen wir an, ich möchte nicht TEMP. TABELLEN)
Wie schreibe ich die SQL/Design der DB effizient?
Korrigieren Sie Ihre Datenbank so, dass pro 'pid' und' code' eine Zeile steht. Haben mehrere Spalten mit den gleichen Daten ist fast nie die richtige Lösung. –
Könntest du ein wenig näher ausführen? Eine Zeile pro PID und eine Zeile pro Code? Oder um diese 22 Spalten auf nur die benötigten zu reduzieren. – SQLnoob