AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Laufzeit von Stored Procedure verkürzen
Thema durchsuchen
Ansicht
Themen-Optionen

Laufzeit von Stored Procedure verkürzen

Ein Thema von Andidreas · begonnen am 4. Okt 2012 · letzter Beitrag vom 18. Okt 2012
Antwort Antwort
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

AW: Laufzeit von Stored Procedure verkürzen

  Alt 16. Okt 2012, 16:16
Ja, den haben wir uns angeschaut und der macht das ganze noch unverständlicher.

1. Query über den Ausführungsplan geprüft --> Ergebnis, es wird ein Index vorgeschlagen.
2. Vorgeschlagenen Index angelegt --> Ergebnis, Query minimal schneller.
3. Vorgeschlagenen Index wieder gelöscht und Query erneut über den Ausführungsplan geprüft --> Ergebnis, Es wird kein Index mehr vorgeschlagen!!!

Edit
Nachdem wir den von der MS SQL vorgeschlagenen Index wieder gelöscht haben, sollte doch wieder der fehlende Index vorgeschlagen werden oder sehe ich das falsch?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Laufzeit von Stored Procedure verkürzen

  Alt 16. Okt 2012, 16:48
Hattet Ihr einen clustered Index erstellt?
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#3

AW: Laufzeit von Stored Procedure verkürzen

  Alt 16. Okt 2012, 17:30
Hast Du noch Converts o.ä. Funktionen in den joins? Das ist nicht schön für Indizes. Die gesamte Abfrage sieht sowieso nach FullScan aus, Index hilft da nichts.
Bin kein MSSQL Meister, aber vielleicht gibts da auch sowas wie Statistics Tabellen, die der Query Optimizer zur Berechnung heranzieht. Wenn die nicht passend aktuell sind, kommt Murx raus (kann).

Ein Index würde m.E. Sinn machen, wenn eine zeitabhängige Dimension in der Tabelle und den Abfragen wäre.
Gruß, Jo
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.494 Beiträge
 
Delphi 12 Athens
 
#4

AW: Laufzeit von Stored Procedure verkürzen

  Alt 17. Okt 2012, 08:48
Index und Abfrage müssen zusammen passen. Eine Abfrage die für eine Tabelle zugleich mehrere Indexe nutzt, ist in der Regel ineffektiv. Von der Laufzeit ist "In" meist sehr teuer.

Ich würde die Abfrage von Oben im Prinzip so umstellen (hab grad kein MS-SQL):
SQL-Code:
CREATE INDEX IDX_Brand_ProductLine ON [inventory].[dbo].[inventory.inv_test] (ALL_Brand, ALL_ProductLine);

select SUM(PLC_Lower25 * ALL_AvailableStock) as PLC_Lower25,
       SUM(PLC_25 * ALL_AvailableStock) as PLC_25,
       SUM(PLC_30 * ALL_AvailableStock) as PLC_30,
       SUM(PLC_40 * ALL_AvailableStock) as PLC_40,
       SUM(PLC_50_55 * ALL_AvailableStock) as PLC_50_55,
       SUM(PLC_60 * ALL_AvailableStock) as PLC_60,
       SUM(PLC_70 * ALL_AvailableStock) as PLC_70,
       SUM(PLC_TOTAL * ALL_AvailableStock) as PLC_Total
from
      [inventory].[dbo].[fnSplit](@Brand, ';') a,
      [inventory].[dbo].[fnSplit](@Productline, ';') b
left join MyView2 c on (c.ALL_Brand = a.Value) and (c.ALL_ProductLine = b.Value);
Hier wird eine Art Kreuztabelle aus den Werten aus "Brand" und "Produktline" erstellt.
Mit jeder Kombination erfolgt dann jeweils eine Abfrage der eigentlichen Datentabelle.
Durch den Index müssen dabei nur die Datensätze gelesen werden, die der jeweiligen Kombination entsprechen.

Sind nur zwei getrennte Indexe (einer über ALL_BRAND und ein anderer über ALL_ProductLine) vorhanden, ist die Abfrage um ein vielfaches langsamer.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Laufzeit von Stored Procedure verkürzen

  Alt 17. Okt 2012, 16:12
Hattet Ihr einen clustered Index erstellt?
Nein, sind Clustred Indexe schneller?

Hast Du noch Converts o.ä. Funktionen in den joins? Das ist nicht schön für Indizes. Die gesamte Abfrage sieht sowieso nach FullScan aus, Index hilft da nichts.
Nein, ich habe mir mittlerweile eine Test Tabelle angelegt in der alle Felder die richtigen Feldtypen haben!

Sind nur zwei getrennte Indexe (einer über ALL_BRAND und ein anderer über ALL_ProductLine) vorhanden, ist die Abfrage um ein vielfaches langsamer.
Gilt das auch wenn z.B. Index1 und Index2 jeweils die Felder ALL_Brand und ALL_Productline beinhalten?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#6

AW: Laufzeit von Stored Procedure verkürzen

  Alt 17. Okt 2012, 18:21
Clustered bedeutet dass die Daten physikalisch dem Index entsprechend sortiert werden. Eine Ausführung des Indexoptimierers, nach dem Löschen eines solchen Indexes, kann diesen auf die Idee bringen dass ein weitere Index nicht benötigt würde.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Laufzeit von Stored Procedure verkürzen

  Alt 18. Okt 2012, 13:14
Also Clustered Indexe hatten wir noch keine erstellt!

Wir haben aber gerade testweise welche erstellt, aber keine von den getesteten brachte eine Performance Verbesserung.

D.h. die Daten werden immernoch ohne Indexe schneller ermittelt und berrechnet als mit
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.494 Beiträge
 
Delphi 12 Athens
 
#8

AW: Laufzeit von Stored Procedure verkürzen

  Alt 18. Okt 2012, 13:20
Zitat:
Sind nur zwei getrennte Indexe (einer über ALL_BRAND und ein anderer über ALL_ProductLine) vorhanden, ist die Abfrage um ein vielfaches langsamer.
Gilt das auch wenn z.B. Index1 und Index2 jeweils die Felder ALL_Brand und ALL_Productline beinhalten?
Ja, wenn die Abfrage tatsächlich beide Indexe verwendet ist das langsam.
Dazu sieht man sich am besten den Ausführungsplan an.
Es ist nicht nur wichtig das die in der Bedingung verwendeten Felder im enthalten sind, diese sollten auch an erster Stelle im Index definiert sein.
Zitat:
D.h. die Daten werden immernoch ohne Indexe schneller ermittelt und berrechnet als mit
Dann sind entweder die Indexe für die Abfragen nicht geeignet oder die Abfragen ungünstig formuliert.
Bitte mal beides posten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz