MySql betrachtet die Leistung
Wenn Sie gehen hinunter die Straße mit Blick auf, wie können Sie eine gute Leistung?
Oder ist es besser, nicht zu verwenden-Ansichten in den ersten Platz, und nur integrieren, das äquivalent in der select-Anweisungen?
InformationsquelleAutor der Frage Ed Heal | 2012-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es Hängt Davon Ab.
Es ganz darauf an, was Sie anzeigen über anzeigen. Aber wahrscheinlich reduzieren Ihren Aufwand und bietet somit eine höhere Leistung. Wenn die SQL-Anweisung auf eine nicht indizierte Sicht verweist, die parser und query-optimizer analysiert die Quelle für die SQL-Anweisung und die Sicht und lösen Sie dann in einen einzelnen Ausführungsplan. Es gibt nicht einen plan für die SQL-Anweisung und einen eigenen plan für die Ansicht.
Blick nicht kompiliert. Seine virtuellen Tabelle aus anderen Tabellen. Wenn Sie es schaffen, es nicht mehr aufzuhalten, irgendwo auf Ihrem server. Die zugrunde liegenden Abfragen, bis der Ansicht sind, unterliegen den gleichen performance-Gewinne oder Dellen von der Abfrage-Optimierer. Ich habe noch nie getestet, die performance auf einen Blick VS die zugrunde liegende Abfrage, aber ich könnte mir vorstellen das die Leistung geringfügig variieren kann. Sie erhalten bessere performance auf eine indizierte Sicht, wenn die Daten relativ statisch. Dies kann sein, was Sie vielleicht denken, in Bezug auf "kompiliert".
Vorteile der Ansichten:
Finden Sie diese nützlichen links:
Siehe performance-Gewinne durch die Verwendung von indizierten sichten in SQL ServerInformationsquelleAutor der Antwort Somnath Muluk
Ich denke, der blog von Peter Zaitsev hat die meisten details. Ich spreche aus persönlicher Erfahrung-Ansichten durchführen können, auch wenn Sie in der Regel halten Sie Sie einfach. Bei einem meiner Kunden Sie hielten an, Schichtung einen Blick auf den anderen und es endete in einer perfomance Alptraum.
Ich in der Regel verwenden Sie Ansichten, um zu zeigen, einen anderen Aspekt einer Tabelle. Zum Beispiel in meiner Mitarbeiter Tabelle zeigen mir den Managern oder ausblenden das Feld "salary" aus nicht-HR-Mitarbeiter. Auch immer sicherstellen, dass Sie ausführen einer ERKLÄREN, auf die Abfrage-und Sicht-zu verstehen, genau das, was in MySQL.
Wenn Sie möchten, solider Beweis in deinem Szenario würde ich vorschlagen, dass Sie test. Es ist wirklich schwer zu sagen, mit Blick auf ist immer ein performance-killer dann wieder ein schlecht geschriebenes Ansicht ist wahrscheinlich töten Sie Ihre Leistung.
InformationsquelleAutor der Antwort Namphibian
Erfüllen Ihren Zweck, aber die versteckte Komplexität und Ineffizienzen in der Regel überwiegen einen direkteren Ansatz. Ich habe einmal begegnet eine SQL-Anweisung, wurde der Beitritt auf die sichten und Sortieren die Ergebnisse. Die Ansichten waren Sortieren, so dass die Ausführungszeit gemessen werden können, die in dem, was schien wie Stunden.
InformationsquelleAutor der Antwort GDP
Hier eine tl;dr Zusammenfassung finden Sie detaillierte Bewertungen von Peter Zaitsev und anderswo.
Views in MySQL sind in der Regel eine schlechte Idee. Bei Grooveshark wir betrachten Sie als schädlich zu sein und immer zu vermeiden. Wenn Sie vorsichtig sind, können Sie diese Arbeit aber am besten Sie sind ein Weg, sich daran zu erinnern, wie, um Daten auszuwählen, oder halten Sie Sie davon, erneut komplizierte Verknüpfungen. Im schlimmsten Fall kann es zu massiven Ineffizienzen, ausblenden der Komplexität, verursachen zufälligen verschachtelte subselects (vorläufigen Tabellen und die auf der Festplatte Prügel), etc.
Ist es am besten, Sie zu vermeiden, und halten Sie Ihre Abfragen im code.
InformationsquelleAutor der Antwort Jay Paroline
Wenn wir diskutieren, "wenn Sie Blick auf, wie um zu gewährleisten," performance", und nicht die Auswirkungen auf die Leistung von Ansichten in Allgemeinen, ich denke, es läuft darauf hinaus, Zurückhaltung (in sich selbst).
Können Sie in Schwierigkeiten geraten, wenn Sie nur schreiben, sichten, machen Sie Ihre Anfrage einfach in allen Fällen, aber sich nicht kümmern, dass Ihre Ansichten sind wirklich nützlich, performance-wise. Jede Abfrage, die Sie tun, am Ende laufen sollte, sane (siehe auch den Kommentar Beispiel aus diesem link von @eggyal). Natürlich ist das eine Tautologie, aber deshalb nicht weniger wertvoll
Sie vor allem brauchen, um sein vorsichtig nicht um Ansichten, aus Ansichten, nur weil Sie, dass machen könnte es einfacher zu machen, diese Ansicht.
Am Ende müssen Sie sich der Grund, Sie verwenden Aussicht. Jedes mal, wenn Sie dies tun, um das Leben leichter machen auf die Programmierung beenden Sie könnte besser sein, der mit einer gespeicherten Prozedur IMHO.
Um die Dinge unter Kontrolle möchten Sie vielleicht, um aufzuschreiben, warum Sie eine bestimmte Ansicht, und entscheiden, warum Sie es verwenden. Für jeden "neuen", die Sie in Ihre Programmierung überprüfen, wenn Sie wirklich brauchen, die anzeigen, warum Sie es brauchen, und wenn Sie es wäre immer noch geben Ihnen eine vernünftige Ausführung-Pfad. Halten Sie die überprüfung Ihrer Verwendungen zu halten, schnell, und behalten die Kontrolle, wenn Sie wirklich brauchen, Ansicht.
InformationsquelleAutor der Antwort Nanne
Einer Sache, die nicht erwähnt so weit, aber macht einen grossen Unterschied, ist adäquate Indizierung der Blick auf' Quelle Tabellen.
Wie oben erwähnt, Ansichten, die Ihren Wohnsitz nicht in deiner DB aber neu erstellen jedes mal, wenn. Also alles, was den Wiederaufbau einfacher für die DB erhöht die Leistung der anzeigen.
Oft, sichten join-Daten in einer Weise, die ist sehr schlecht für die Lagerung (keine Normalform) aber sehr gut für die weitere Verwendung (Analyse, Präsentation von Daten, Benutzer, ...) und damit das Zusammenfügen und aggregieren von Daten aus verschiedenen Tabellen.
Ob oder nicht die Säulen, auf denen die Operationen vorgenommen werden, indiziert sind oder nicht, macht einen großen Unterschied auf die Leistung der anzeigen. Wenn die Tabellen und Ihre entsprechenden Spalten indiziert sind bereits Zugriff auf die anzeigen nicht zu Ende, in re-die Berechnung des Indizes über und über wieder erste. (auf der Sollseite steht, das wird getan, wenn die Daten manipuliert, die in den Quelltabellen)
! Index alle Spalten, die in Join und GROUP BY-Klausel in der CREATE VIEW-Anweisung !
InformationsquelleAutor der Antwort petermeissner