Zunächst müssen Sie möglicherweise einen Schritt zurückgehen und Ihr Schema erneut untersuchen. Wie sind Sie mit 10 Millionen Zeilen in der Mitglieder-Tabelle gelandet? Haben Sie wirklich 10 Millionen Mitglieder (es scheint viel zu sein)?
Ich vermute (obwohl ich nicht sicher bin), dass Sie weniger als 10 Millionen Mitglieder haben, in welchem Fall Ihre Tabelle nicht richtig strukturiert sein wird. Bitte posten Sie das Schema, das ist der erste Schritt, um uns zu helfen.
Wenn Sie tun haben 10 Millionen Mitglieder, ist mein Rat, um Ihre Anwendung Vendor-agnostic zu beginnen (d. H. Standard-SQL). Wenn Sie Probleme bekommen, werfen Sie einfach Ihr aktuelles DBMS weg und ersetzen Sie es durch ein leistungsfähigeres.
Sobald Sie festgestellt haben, haben Sie eine, die geeignet ist, dann und nur dann würde ich raten, mit herstellerspezifischen Sachen. Sonst wird es ein schmerzhafter Prozess sein, sich zu ändern.
BTW, 10 Millionen Zeilen ist nicht wirklich eine große Datenbanktabelle, zumindest nicht, wo ich herkomme.
Darüber hinaus ist das Folgende wichtig (nicht unbedingt eine erschöpfende Liste, aber ein guter Start).
- Entwerfen Sie Ihre Tabellen für 3NF immer. Sobald Sie Leistungsprobleme feststellen, können Sie gegen diese Regel verstoßen, sofern Sie die Konsequenzen verstehen.
- Stören Sie nicht die Leistungsoptimierung während der Entwicklung, Ihre Abfragen sind im Fluss. Akzeptiere einfach die Tatsache, dass sie nicht schnell laufen können.
- Sobald die meisten Abfragen gesperrt sind, dann beginnen, Ihre Tabellen zu tunen. Fügen Sie beliebige Indizes hinzu, um die Auswahl zu beschleunigen, zu de-normalisieren und so weiter.
- Tuning ist nicht eine Set-and-Forget-Operation (weshalb wir unsere DBAs so viel bezahlen). Überwachen Sie die Leistung kontinuierlich und passen Sie sie an.
- Ich bevorzuge es, meinen SQL-Standard zu behalten, um die Fähigkeit zu behalten, Lieferanten jederzeit zu wechseln. Aber ich bin pragmatisch. Verwenden Sie herstellerspezifisches Zeug, wenn es wirklich einen Schub gibt. Sei dir dessen bewusst, was du verlierst, und versuche, die herstellerspezifischen Dinge so gut wie möglich zu isolieren.
- Leute, die
"select * from ..."
verwenden, wenn sie nicht jede Spalte benötigen, sollten in die Unterwerfung geschlagen werden.
- Ebenso diejenigen, die jede Zeile auf der Clientseite ausfiltern auswählen. Die Leute, die unser DBMS schreiben, sitzen nicht den ganzen Tag herum und spielen Solitaire, sie wissen, wie man Abfragen schnell ausführen kann. Lassen Sie die Datenbank tun, was sie am besten kann. Die Filterung und Aggregation erfolgt am besten auf der Serverseite - senden Sie nur das, was über die Leitung benötigt wird.
- Generieren Sie Ihre Abfragen, um nützlich zu sein. Außer dem DoD, der Berichte benötigt, in denen alle Komponenten seiner Flugzeugträger bis auf die Nüsse-und-Bolzen-Ebene detailliert beschrieben werden, ist niemand daran interessiert, Ihren 1200-seitigen Bericht zu lesen, egal wie nützlich er Ihrer Meinung nach ist.Tatsächlich glaube ich nicht, dass das DoD auch ihre liest, aber ich würde nicht wollen, dass irgendein General mich auskaubt, weil ich nicht ausgeliefert habe - diese Typen können lauten und sie haben ein gutes Stück raffinierter Waffen unter ihren Steuerung.
... nur das eine Duplikat schließen, nicht beide ... – Eric
Bitte schließen Sie das andere (es hat vier Stimmen zu diesem zwei). – paxdiablo
ich schließe es danke –