Mailinglisten-Archive |
Hallo, ich hab hier einen View aus dem ich von mehreren Feldern die eindeutigen Werte ermitteln muss. (eindeutige Werte für DropDown-Felder auf der Website) Der View selbst liefert rund 500k Datensätze. Bei jedem Zugriff dauert es ca. 9 Sekunden. Die Tabellen wurden damals als INNODB erstellt obwohl MYISAM auch gehen würde. Eine Test-Umstellung auf MyISAM hat wenig Erfolg gebracht. Da ich von massig Feldern die eindeutigen Werte benötige, ist die Wartezeit nicht mehr tragbar. Beim 2. Aufruf des Skripts werden natürlich die Daten schneller ermittelt, da MySQL die Daten cached. Nun stellt sich die Frage wie ich das ganze optimieren kann?! - Entweder alle möglichen Felder indizieren - das Ergebnis des Views in eine Tabelle speichern und diese auslesen Mit folgendem SQL greife ich für jedes einzelne Feld auf den View zu: --- select distinct Feldnamexyz from view_art_umsatz; --- Der View hat folgenden Aufbau (export von phpMyAdmin): --- CREATE VIEW `view_art_umsatz` AS select `kl_firmatyp`.`kltyp_bez` AS `kltyp_bez`, `kl_firma`.`kl_nr` AS `kl_nr`, `kl_firma`.`kl_firma` AS `kl_firma`, `kl_firma`.`kl_synonym` AS `kl_synonym`, `kl_rechnungsgruppe`.`rechgrp_bez` AS `rechgrp_bez`, `art_artikelpreisgruppe`.`artpg_bez` AS `artpg_bez`, `vk_auftrag`.`at_typ` AS `at_typ`, `vk_auftragstatus`.`atst_bez` AS `atst_bez`, `vk_auftrag`.`at_lieferscheinnr` AS `at_lieferscheinnr`, `vk_auftrag`.`at_lieferscheinam` AS `at_lieferscheinam`, year(`vk_auftrag`.`at_lieferscheinam`) AS `at_lieferschein_jahr`, quarter(`vk_auftrag`.`at_lieferscheinam`) AS `at_lieferschein_quartal`, month(`vk_auftrag`.`at_lieferscheinam`) AS `at_lieferschein_monat`, week(`vk_auftrag`.`at_lieferscheinam`,1) AS `at_lieferschein_kalenderwoche`, dayofmonth(`vk_auftrag`.`at_lieferscheinam`) AS `at_lieferschein_monatstag`, `vk_auftrag`.`at_rechnungnr` AS `at_rechnungnr`, `vk_auftrag`.`at_rechnungam` AS `at_rechnungam`, year(`vk_auftrag`.`at_rechnungam`) AS `at_rechnung_jahr`, quarter(`vk_auftrag`.`at_rechnungam`) AS `at_rechnung_quartal`, month(`vk_auftrag`.`at_rechnungam`) AS `at_rechnung_monat`, week(`vk_auftrag`.`at_rechnungam`,1) AS `at_rechnung_kalenderwoche`, dayofmonth(`vk_auftrag`.`at_rechnungam`) AS `at_rechnung_monatstag`, round(`vk_auftrag`.`at_bezahlt`,2) AS `at_bezahlt`, `vk_auftrag`.`at_bezahltam` AS `at_bezahltam`, `vk_auftragartikel`.`atart_art_nr` AS `atart_art_nr`, `vk_auftragartikel`.`atart_art_bez` AS `atart_art_bez`, round(`vk_auftragartikel`.`atart_menge`,2) AS `atart_menge`, round(`vk_auftragartikel`.`atart_art_inhalt`,2) AS `atart_art_inhalt`, round(`vk_auftragartikel`.`atart_preis`,2) AS `atart_preis`, round((`vk_auftragartikel`.`atart_art_inhalt` * `vk_auftragartikel`.`atart_preis`),2) AS `atart_kistenpreis`, round(`art_ust`.`ust_prozentsatz`,2) AS `ust_prozentsatz`,round((((`vk_auftragartikel`.`atart_art_inhalt` * `vk_auftragartikel`.`atart_menge`) * `vk_auftragartikel`.`atart_preis`) * if((`vk_auftrag`.`atst_id` = 6),-(1),1)),2) AS `atart_netto`, round(((((`vk_auftragartikel`.`atart_art_inhalt` * `vk_auftragartikel`.`atart_menge`) * `vk_auftragartikel`.`atart_preis`) * (`art_ust`. `ust_prozentsatz` / 100)) * if((`vk_auftrag`.`atst_id` = 6),-(1),1)),2) AS `atart_mwstbetrag`, round(((((`vk_auftragartikel`.`atart_art_inhalt` * `vk_auftragartikel`.`atart_menge`) * `vk_auftragartikel`.`atart_preis`) * (1 + (`art_ust`. `ust_prozentsatz` / 100))) * if((`vk_auftrag`.`atst_id` = 6),-(1),1)),2) AS `atart_brutto` from (`kl_firmatyp` join ((((((`kl_firma` left join `kl_rechnungsgruppe` on((`kl_firma`.`rechgrp_id` = `kl_rechnungsgruppe`.`rechgrp_id`))) left join `art_artikelpreisgruppe` on((`kl_firma`.`artpg_id` = `art_artikelpreisgruppe`.`artpg_id`))) left join `vk_auftrag` on((`kl_firma`.`kl_id` = `vk_auftrag`.`kl_id`))) left join `vk_auftragstatus` on((`vk_auftrag`.`atst_id` = `vk_auftragstatus`.`atst_id`))) left join `vk_auftragartikel` on((`vk_auftrag`.`at_id` = `vk_auftragartikel`.`at_id`))) left join `art_ust` on((`vk_auftragartikel`.`ust_id` = `art_ust`.`ust_id`)))) where (`kl_firma`.`kltyp_id` = `kl_firmatyp`.`kltyp_id`); --- Felder von denen ich die eindeutigen Werte benötige: --- "kltyp_bez", "rechgrp_bez", "artpg_bez", "at_typ", "atst_bez", "at_lieferschein_jahr", "at_lieferschein_quartal", "at_lieferschein_monat", "at_lieferschein_kalenderwoche", "at_lieferschein_monatstag", "at_rechnung_jahr", "at_rechnung_quartal", "at_rechnung_monat", "at_rechnung_kalenderwoche", "at_rechnung_monatstag", "at_bezahlt", "ust_prozentsatz" --- Für jeden Hinweis dankbar. Mit freundlichen Grüßen Mario Batz
php::bar PHP Wiki - Listenarchive