AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Index wird teilweise nicht benutzt
Thema durchsuchen
Ansicht
Themen-Optionen

Index wird teilweise nicht benutzt

Ein Thema von Dumpfbacke · begonnen am 10. Aug 2016 · letzter Beitrag vom 11. Aug 2016
Antwort Antwort
Seite 1 von 2  1 2      
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 12:17
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
Hallo Leute,
ich habe ein Problem das manchmal ein Index nicht benutzt wird. Ich habe den Select einmal vereinfacht. Der Rest wird nicht zu Lösung benötigt und es ist so ggf. einfacher zu lesen

Delphi-Quellcode:
Select Tabelle1.FeldA,Tabelle1.FeldB
From Tabebel1
Left Outer Join Tabelle2 on (gelöscht um es zu vereinfachen )
where Tabebel1.Feld1 is NULL and Tabebel1.Feld2 = 'BAand
      Tabebel1.Feld3 = 'IX2000and (Tabebel1.Feld4 = 'ABor
      Tabebel1.Feld4 = 'AEor Tabebel1.Feld4 = 'or
      Tabebel1.Feld4 = 'AR')
      and Tabebel1.Feld5 is NULL and Tabelle2.Feld9 = '1'

group by Tabelle1.FeldA,Tabelle1.FeldB
Es ist jewals ein extra Index angelegt auf:
Feld1, Feld2, Feld3, Feld4, Feld5, Feld9

Es wird nun nur der Index auf das Feld1 benutzt und ein Indix auf ein Feld9 welche auch in der Join ist. Wenn ich diese Bedingung entferne, also bei der Where das Feld1 entferne so werden als Index alle (restlichen) benutzt.

Wie kann den das sein bzw. warum benutzt Firebid nicht alle angelegten ?


Danke schon mal für die Antworten Tanja
Tanja

Geändert von Dumpfbacke (10. Aug 2016 um 13:20 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 12:26
Wie kann Feld3 gleichzeitig 'IX2000' und was anderes sein?

Was passiert bei einem Index über alle benötigten Felder?

Ich würde die or durch in ersetzen.
Markus Kinzler
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#3

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 12:36
Zitat:
By default, relational databases ignore NULL values (because the relational model says that NULL means "not present"). So, Index does not store NULL value, consequently if you have null condition in SQL statement, related index is ignored (by default).
http://stackoverflow.com/questions/9...ullable-column
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 13:18
Wie kann Feld3 gleichzeitig 'IX2000' und was anderes sein?

Was passiert bei einem Index über alle benötigten Felder?

Ich würde die or durch in ersetzen.
Danke für den Hinweis. Ich habe den Schreibfehler beseitigt.

Ein Index über alle Felder habe ich nochnicht angelegt. Gibt es dadurch nachteile ?
Tanja
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 13:21
Zitat:
By default, relational databases ignore NULL values (because the relational model says that NULL means "not present"). So, Index does not store NULL value, consequently if you have null condition in SQL statement, related index is ignored (by default).
http://stackoverflow.com/questions/9...ullable-column
Danke für den Hinweis. Ich meinte auch mal so etwas gelesen zu haben. Nur warum wird denn den Index des Feldes 5 benutzt ?
Tanja

Geändert von Dumpfbacke (10. Aug 2016 um 15:10 Uhr)
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#6

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 14:46
Nur warum wird denn den Index des Feldes 5 benutzt ?
Die Optimizer der DB Systeme haben da so ihre Geheimnisse
Wie sieht des der Execution Plan für dieses Statement aus?
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 15:44
Nur warum wird denn den Index des Feldes 5 benutzt ?
Die Optimizer der DB Systeme haben da so ihre Geheimnisse
Wie sieht des der Execution Plan für dieses Statement aus?

Plan
PLAN SORT (JOIN (Tabelle1 INDEX (IDX_FELD1), Tabelle2 INDEX (IDX_FELD9, IDX_FELD9)))

------ Performance info ------
Prepare time = 639ms
Execute time = 1m 13s 539ms
Avg fetch time = 4.085,50 ms
Current memory = 14.478.580
Max memory = 14.634.260
Memory buffers = 800
Reads from disk to cache = 52.880
Writes from cache to disk = 0


Wenn ich die erste Bedingung entferne

Plan
PLAN SORT (JOIN (Tabelle1 INDEX (IDX_Feld4, IDX_Feld4, IDX_Feld4, IDX_Feld4, IDX_Feld4, IDX_Feld5), Tabelle2 INDEX (IDX_Feld9, IDX_Feld9)))

------ Performance info ------
Prepare time = 655ms
Execute time = 3s 291ms
Avg fetch time = 253,15 ms
Current memory = 17.677.420
Max memory = 17.696.404
Memory buffers = 800
Reads from disk to cache = 30.649
Writes from cache to disk = 0

Hier benutze er jeodch auch nicht den Index des Feld2 und Feld 3 was jedoch nicht so tragisch ist da es trotzdem schnell geht.

Warum benutzt er immer nur einen Teil ?
Tanja
  Mit Zitat antworten Zitat
Bambini
(Gast)

n/a Beiträge
 
#8

AW: Index wird teilweise nicht benutzt

  Alt 10. Aug 2016, 16:26
Hier benutze er jeodch auch nicht den Index des Feld2 und Feld 3 was jedoch nicht so tragisch ist da es trotzdem schnell geht.
Evtl. spricht die Statistik dagegen diese Indices auch noch zu lesen. Evtl. sind sehr viel gleiche Werte in der Tabelle/Index und dann geht er den Weg die Werte für Feld2 und Feld3 direkt aus der Treffermenge der anderen Indices zu prüfen.
Warum benutzt er immer nur einen Teil ?
Wenn immer die gleichen Felder abgefragt werden, würde ich versuchen einen zusammengesetzten Index über alle betroffenen Felder zu bauen und nicht für jedes Feld einen eigenen. Die Felder aber nur dann in den Index mit aufnehmen, wenn genügend verschiedene Werte in diesem Feld erwartet werden.
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Index wird teilweise nicht benutzt

  Alt 11. Aug 2016, 07:52
Wenn immer die gleichen Felder abgefragt werden, würde ich versuchen einen zusammengesetzten Index über alle betroffenen Felder zu bauen und nicht für jedes Feld einen eigenen. Die Felder aber nur dann in den Index mit aufnehmen, wenn genügend verschiedene Werte in diesem Feld erwartet werden.
Ich habe nun mal einen Index über alle Felder angelegt. Leider benutz er diesen Index nicht. Es benutzt den Index des ersten Feldes. Wenn ich das erset Feld rausnehme bei der Where benutzt er die Index.
Ich verstehe langsam nicht mehr was das Teil da machet ????

Tanja
Tanja
  Mit Zitat antworten Zitat
jobo

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

AW: Index wird teilweise nicht benutzt

  Alt 11. Aug 2016, 09:24
Das kannst Du auch nicht "verstehen", der Optimizeralgorithmus basiert auf (hoffentlich) komplexen Entscheidungen, den Statistiken* und irgendwelchen genialen oder doofen Ideen der Entwickler.
Das bedeutet konkret, die Änderung eines einzigen (!) Feldinhaltes kann den Optimizer dazu bringen, einen anderen Ausführungsplan zu verwenden.

Dein "großer" Index muss demzufolge nicht alle Felder enthalten, nur die wichtigsten. Kleinkram geht auch ohne Index. Es sollte - wie schon oben gesagt- Felder mit hoher Varianz, wenig/kein NULL sein.

*Statistiken: Mengenverhältnisse der Werte in den Feldern der Tabellen.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      

 

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:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz