Ich bin ziemlich neu zu MySQL. Ich habe 2 identische mysql-Tabellen, die jeweils 50K Zeilen (70 Spalten) haben. Diese Tabellen werden jeden Tag durch einen Datafeed aktualisiert. Ich muss einige verschachtelte Abfragen wie Kreuzungen/Subtraktionen etc. ausführen.Mysql Kreuzung Abfrage Leistung
Eine der Abfragen, die ich versuche zu verwenden, ist wie folgt. Aber es funktioniert nicht richtig. Entweder dauert es 5 Minuten. bis 10 Minuten (durch Terminal) oder es antwortet nicht zurück.
SELECT *
FROM table1
WHERE table1.sku IN (SELECT t1.sku
FROM ((SELECT DISTINCT sku
FROM table2)
UNION ALL
(SELECT DISTINCT sku
FROM table1)) AS t1
GROUP BY sku
HAVING Count(*) >= 2)
Wie kann ich es schneller arbeiten/richtig? Wie sollte ich die Tabellen/Spalten konfigurieren (Index, Primärschlüssel usw.) Oder muss ich den mysql Server anpassen?
Ich habe mehrere Dinge ausprobiert. Ich habe Indizes auf dem 'sku' erstellt, die varchar (75) Spalten sind. Mein Datenbankserver läuft auf einem 1 CoreProcessor (Digital Ocean) Server mit 512 MB Speicher.
--- Abfrage mit ‚erklären‘
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
| 1 | PRIMARY | table1 | ALL | NULL | NULL | NULL | NULL | 30260 | Using where |
| 2 | DEPENDENT SUBQUERY | <derived3> | ALL | NULL | NULL | NULL | NULL | 65677 | Using temporary; Using filesort |
| 3 | DERIVED | table2 | range | NULL | sku_idx | 227 | NULL | 31016 | Using index for group-by |
| 4 | UNION | table1 | range | NULL | sku | 227 | NULL | 30261 | Using index for group-by |
| NULL | UNION RESULT | <union3,4> | ALL | NULL | NULL | NULL | NULL | NULL | |
+----+--------------------+-----------------------+-------+---------------+---------+---------+------+-------+---------------------------------+
haben Vielen Dank @Tudor –