Systems and methods create and maintain a maxdiff histogram for use in
determining query costs. One aspect of the system is a data structure that
provides fields that can be used to accurately represent a distribution of
data regardless of the uniformity or lack thereof of the data. The fields
of the data structure represent buckets in the histogram. The fields
include a range_Hi_Key field indicating the upper bound for values
represented by the bucket. The range_Hi_Key field is also the most
frequently occurring value in the bucket. In addition, the fields include
a cardEQ field representing the count of the most frequently occurring
value, a cardLT field, which is the count of the values in the bucket that
are less than the range_Hi_Key field, a LTDistinct field, which is a count
of the number of distinct values represented by the bucket, and an
LTDensity field, which is an average count for each of the attribute
values in the bucket that are not the range_Hi_Key value. A further aspect
is a method that creates and maintains the maxdiff histogram data
structure. The method starts by creating a list of unused buckets. An
input stream of attribute values is sorted and the following acts are
performed for each value. If the new value is the same as the previous
value, the cardEQ field is incremented. If not, the method checks to see
if the histogram is full. If a bucket is available, it is allocated and
the bucket fields are initialized. If a bucket is not available, the two
buckets that have the least variance between them are merged into one
bucket, and the freed bucket is made available for the newly read input
value. Whenever a new bucket is created or altered, the variance between
the bucket and its neighbors is recalculated.
De systemen en de methodes leiden en handhaven tot een maxdiffhistogram voor gebruik in het bepalen van vraagkosten. Één aspect van het systeem is een gegevensstructuur die gebieden verstrekt die kunnen worden gebruikt om een verspreiding van gegevens ongeacht de uniformiteit of het gebrek daarvan aan de gegevens nauwkeurig te vertegenwoordigen. De gebieden van de gegevensstructuur vertegenwoordigen emmers in de histogram. De gebieden omvatten een range_Hi_Key- gebied dat op het bovenleer verbindend voor waarden wijst die door de emmer worden vertegenwoordigd. Het range_Hi_Key- gebied is ook de vaakst voorkomende waarde in de emmer. Bovendien omvatten de gebieden een cardEQ- gebied de telling van de vaakst voorkomende waarde vertegenwoordigen, een cardLT- gebied, dat de telling van de waarden in de emmer zijn die minder dan het range_Hi_Key- gebied, een LTDistinct- gebied zijn, dat een telling van het aantal verschillende waarden die door de emmer worden vertegenwoordigd is, en een LTDensity- gebied die, dat een gemiddelde telling voor elk van de attributenwaarden in de emmer is die niet de waarde range_Hi_Key zijn. Een verder aspect is een methode die leidt en tot de de gegevensstructuur van de maxdiffhistogram handhaaft. De methode begint door een lijst van ongebruikte emmers te creëren. Een inputstroom van attributenwaarden wordt gesorteerd en de volgende handelingen worden uitgevoerd voor elke waarde. Als de nieuwe waarde het zelfde als de vorige waarde is, wordt het cardEQ- gebied verhoogd. Als niet, controleert de methode om te zien of is de histogram volledig. Als een emmer beschikbaar is, wordt het toegewezen en de emmergebieden worden geïnitialiseerd. Als een emmer niet beschikbaar is, worden de twee emmers die het minste verschil tussen hen hebben samengevoegd in één emmer, en de bevrijde emmer wordt ter beschikking gesteld voor de onlangs gelezen inputwaarde. Wanneer een nieuwe emmer wordt gecreeerd of veranderd, wordt het verschil tussen de emmer en zijn buren opnieuw berekend.