kurz zu meinem Anliegen:
Ich habe mehrere Abfragen für unsere DB (Warenwirtschaft), die ich per Script abarbeiten lassen muss.
Problem: Die Scripte haben eine Laufzeit von zusammen ca. 35min, in den niemand in der Wawi arbeiten kann. :-(
Dies wollte ich nun natürlich optimieren.
Zu unserem Webserver (liegt auf die DB):
Intel Xeon
4 GB RAM
MySQL 5.1.61-0
Apache 2.2.16
Debian
Als erstes habe ich mich dafür mit der Konfig. von Apache und MySQL befasst:
Mit den bekannten Tuningscripten sinnvolle Werte ermittelt und eingestellt --> für`s erste ganz zufrieden, alle Werte im grünen Bereich.
==> Die Scripte sind jetzt auf 25min Laufzeit runter.
Ich habe nun den verdacht, dass auch die Abfrage "optimierungsfähig" sind, leider komme ich da selbst auf keinen grünen Zweig. :-(
Haltet ihr folg. Abfrage für "vernünftig" formuliert oder könnte man diese optimieren?
- UPDATE `products` SET `products_status` = '0' WHERE (SELECT `products_name` FROM `products_description` WHERE `products_id` = `products`.`products_id`) LIKE '%muster%';
UPDATE `products` SET `products_status` = '0' WHERE (SELECT `manufacturers_name` FROM `manufacturers` WHERE `manufacturers_id` = `products`.`manufacturers_id`) = 'Mustermann' AND (SELECT `products_name` FROM `products_description` WHERE `products_id` = `products`.`products_id`) LIKE '%henri%';
UPDATE `products` SET `products_status` = '0' WHERE `products_id` = ANY(SELECT `products_id` FROM `products_to_categories` WHERE `categories_id` = (SELECT `categories_id` FROM `categories_description` WHERE `categories_name` = 'Schuhe')) AND ((SELECT `products_name` FROM `products_description` WHERE `products_id` = `products`.`products_id`) LIKE '%Sonne%');
UPDATE `products_to_categories` SET `categories_id` = '123' WHERE `products_id` = ANY(SELECT `products_id` FROM `products` WHERE `manufacturers_id` = (SELECT `manufacturers_id` FROM `manufacturers` WHERE `manufacturers_name` LIKE 'Mustermann')) AND `products_id` = ANY(SELECT `products_id` FROM `products_description` WHERE `products_name` LIKE '%Schulz%');
UPDATE `products` SET `products_price` = `products_p_price` * 2.5 WHERE `products_id` = ANY (SELECT `products_id` FROM `products_to_categories` WHERE `categories_id` = ANY(SELECT `categories_id` FROM `categories` WHERE (`parent_id` = ANY(SELECT `categories_id` FROM `categories` WHERE `parent_id` = ANY(SELECT `categories_id` FROM `categories_description` WHERE `categories_name` = 'Socken')) OR `parent_id` = ANY(SELECT `categories_id` FROM `categories_description` WHERE `categories_name` = 'Socken')))) AND `products_p_price` BETWEEN '5' AND '10';
UPDATE `products` SET `products_price` = `products_uvp` * 0.979 WHERE (SELECT `manufacturers_name` FROM `manufacturers` WHERE `manufacturers_id` = `products`.`manufacturers_id`) = 'Mustermann';
UPDATE `products` SET `products_price` = `products_p_price` * 1.08 WHERE `products_id` = ANY (SELECT `products_id` FROM `products_to_categories` WHERE `categories_id` = ANY(SELECT `categories_id` FROM `categories` WHERE (`parent_id` = ANY(SELECT `categories_id` FROM `categories` WHERE `parent_id` = ANY(SELECT `categories_id` FROM `categories_description` WHERE `categories_name` = 'Hemden')) OR `parent_id` = ANY(SELECT `categories_id` FROM `categories_description` WHERE `categories_name` = 'Hemden')))) AND (SELECT `manufacturers_name` FROM `manufacturers` WHERE `manufacturers_id` = `products`.`manufacturers_id`) = 'Steiger' AND `products_p_price` BETWEEN '20' AND '50';
O.g. Abfragen bekomme ich, trotz fast zweiwöchiger Rechereche im Netz, nicht anders formuliert. :-(
Vielen Dank schon jetzt für eure Hilfe!
Gruß
Manu