Ich mache eine Suchfunktion, die verfügbare Optionen aktualisiert, wenn in jedem der Dropdown-Menüs eine Auswahl getroffen wird.Wie kann ich diese wp_postmeta MySQL Abfragen schneller machen?
Hier sind zwei mysql-Abfragen, die ausgeführt werden, um zwei Dropdown-Menüs zu aktualisieren. Bei etwa 5000 Produkten in der Datenbank dauert jede Abfrage etwa 4 Sekunden. Wie kann ich sie beschleunigen?
Ich habe versucht, sie zu einer einzigen Abfrage und Gruppierung mit PHP zu kombinieren, aber dann waren die Optionen im ausgewählten Dropdown nicht verfügbar, wenn eine Option gelöscht wurde.
SELECT DISTINCT l.meta_value AS ship_id
FROM wp_posts a
JOIN wp_postmeta f ON ID = f.post_id
JOIN wp_postmeta g ON ID = g.post_id
JOIN wp_postmeta h ON ID = h.post_id
JOIN wp_postmeta d ON ID = d.post_id JOIN wp_postmeta i ON ID = i.post_id
JOIN wp_postmeta l ON ID = l.post_id
WHERE post_type = 'product'
AND f.meta_key = 'first_start_date'
AND g.meta_key = 'last_start_date'
AND h.meta_key = 'product_group'
AND h.meta_value = 'cruises'
AND d.meta_key = 'destinationregion'
AND i.meta_key = 'destinationarea'
AND 'South America' IN (d.meta_value, i.meta_value)
AND (
(CONCAT('2016', '01-01') BETWEEN STR_TO_DATE(f.meta_value, '%b %e, %Y') AND STR_TO_DATE(g.meta_value, '%b %e, %Y')) OR
(STR_TO_DATE(f.meta_value, '%b %e, %Y') BETWEEN CONCAT('2016', '-01-01') AND CONCAT('2016' + 1, '-01-01'))
)
AND l.meta_key = 'cruiseship'
ORDER BY l.meta_value ASC
-
SELECT DISTINCT d.meta_value AS destinationregion, i.meta_value AS destinationarea
FROM wp_posts a
JOIN wp_postmeta f ON ID = f.post_id
JOIN wp_postmeta g ON ID = g.post_id
JOIN wp_postmeta h ON ID = h.post_id
JOIN wp_postmeta d ON ID = d.post_id JOIN wp_postmeta i ON ID = i.post_id
WHERE post_type = 'product'
AND f.meta_key = 'first_start_date'
AND g.meta_key = 'last_start_date'
AND h.meta_key = 'product_group'
AND h.meta_value = 'cruises'
AND (
(CONCAT('2016', '01-01') BETWEEN STR_TO_DATE(f.meta_value, '%b %e, %Y') AND STR_TO_DATE(g.meta_value, '%b %e, %Y')) OR
(STR_TO_DATE(f.meta_value, '%b %e, %Y') BETWEEN CONCAT('2016', '-01-01') AND CONCAT('2016' + 1, '-01-01'))
)
AND d.meta_key = 'destinationregion' AND i.meta_key = 'destinationarea'
ORDER BY destinationregion, destinationarea"
Vielleicht haben Sie Tabellenstruktur zur Verfügung stellen könnte, Beispieldaten und die erwarteten Ergebnisse. Ich habe derzeit Schwierigkeiten, mich zu verstehen. – sgeddes
Das langsame Bit ist der str_to_date Teil – Strawberry
Noch 3,7s ohne diesen Teil. :(wp_postmeta hat 3 Millionen Zeilen ... Je weniger wiederholte Joins, desto besser. – MartyBoggs