php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.07.2007, 12:10  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Indexe

Hallo,

kann mir einer von euch Spezis erklären, ab welcher Index-Größe (relativ zur Gesamttabellengröße) das setzen von Indexen keinen Sinn mehr macht?

Ich habe eine Tabelle mit vielen Spalten und nur rund 200-500 Datensätzen. Man kann nun aufgrund der Vielzahl der Spalten auch nach einer Vielzahl von Eigenschaften eines Datensatzes suchen, macht das Anlegen von Indexen überhaupt noch Sinn?

Das ganze soll SEHR performant sein, so sind bereits alle nicht INT-Werte in extra-Tabellen ausgelagert, so dass keine variable Spaltenlänge mehr auf die Performance drückt.

Konkret geht es um Gebrauchtwagen, um den Nebel etwas zu lichten.
Bitte aber keine Vermutungen, sondern fundierte oder zumindest empirisch erwiesene Aussagen =)
Danke & Gruß, c
Zergling-new ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.07.2007, 14:19  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Zergling,

Zitat:
kann mir einer von euch Spezis erklären, ab welcher Index-Größe (relativ zur Gesamttabellengröße) das setzen von Indexen keinen Sinn mehr macht?
Das kann man nicht so genau sagen. Auf unserer ORACLE haben wir Indizes, die die Datenmenge bei Weitem übersteigen, jedoch für den "direct row access" extrem wichtig sind. Ich würde jedoch aus Performance-Gründen auf alle Spalten einen Index legen, die in den Statements in WHERE-Clauses stecken, oder die externe Tabellen referenzieren. Um das jedoch beurteilen zu können, bräucht ich dein komplettes Layout. (Ich weiß, raten macht so viel Spass )


Zitat:
Ich habe eine Tabelle mit vielen Spalten und nur rund 200-500 Datensätzen. Man kann nun aufgrund der Vielzahl der Spalten auch nach einer Vielzahl von Eigenschaften eines Datensatzes suchen, macht das Anlegen von Indexen überhaupt noch Sinn?
Indizes machen vor allem dann Sinn, wenn sie selektiv sind. Selektivität erreicht man oft dadurch, dass man Spalten indiziert, die fortlaufende Integer-Werte oder wenige Enumerationen enthalten. Bei deinem Auto-Zeugs könnten das Referenzen auf Typen von Autos oder Farben von Autos sein (FKs). Im Fall von kleinen Integer-Zahlen sind Indizes sehr klein und sinnvoll.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 23.07.2007, 14:41  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Es gibt eigentlich nur eine Tabelle gebrauchtwagen, eine Tabelle gebrauchtwagen_details (hier stehen Text-Eingaben) und eine Tabelle gebrauchtwagen_normalisiert (hier stehen herausnormalisierte Werte für Farbe, Fahrzeugtyp etc.)

Die Tabelle gebrauchtwagen enthält knapp mehr als 100 Spalten, hauptsächlich yes/no Flags, gespeichert als TINYINT(1). Datensätze werden es wie erwähnt zwischen 100 und 500 sein (ich kann das jetzt noch nicht sagen, das Dummyfile für den CSV-Import lag bei 328 Einträgen).

Es wird nun eine Suche geben, in der man etwa 10-12 Spalten bedingt selektiert, Preis, Kilometer, Farbe, Fahrzeugtyp etc.

Zusätzlich gibt es eine weitere Maske - jedoch nicht versteckt, also man kann nich sagen, die erweiterte Suche wird eh nie verwendet - für speziellere Details wie Anzahl Sitze, Anzahl Türen.
Wäre es nun angebracht auf ALLE (~ 100 Spalten) einen Index zu legen, die irgendwie in der Suchmaske vorkommen?
Zergling-new ist offline   Mit Zitat antworten
Alt 23.07.2007, 21:37  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.654
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo Zergling,

Zitat:
Wäre es nun angebracht auf ALLE (~ 100 Spalten) einen Index zu legen, die irgendwie in der Suchmaske vorkommen?
An sich sollte das - empirisch betrachtet - kein Problem darstellen, da du relativ wenige Datensätze in deinen Tabellen hast. Ich würde jedoch dazu tendieren, nur dort Indizes zu vergeben, worauf du die meisten Suchen oder direkten Zugriffe los lässt. Die Tabelle "gebrauchtwagen_normalisiert" hat sicher - da normalisiert - wahrscheinlich nur wenige Spalten, die interessant sind. Ich wage zu prognostizieren, dass du mit 10% Indizes auskommen solltest.

Da ich in diesem Fall leider nur vage Aussagen treffen kann schlage ich ausprobieren vor. Wo du Indizes brauchen wirst sind Fulltext-Suchen, das ist aber klar.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 24.07.2007, 00:09  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Gibts aber nicht, habe Texte rausnormalisiert, da stehen jetzt nur Dropdowns zu Verfügung, option-value ist eine ID, option-text der Wert dazu.
Danke für deine Einschätzung, ich poste bei Gelegenheit (könnte etwas dauern), wie ich es umgesetzt habe.
Zergling-new ist offline   Mit Zitat antworten
Alt 31.07.2007, 17:32  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Macht Index-Setzen bei Kardinalität = 2 (also der Anzahl möglicher verschiedener Wertzustände) wirklich Sinn?

Code:
Space usage

Type    Usage

Data     64,944 B
Index   103,424 B
Total   168,368 B
Zergling-new ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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 an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Array Indexe anhand der Werte ordnen PHP Tipps 2005-2 8 23.08.2005 19:43

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
macht es sinn alle spalten einen index zu vergeben

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:34 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.