Heim > Datenbank > MySQL-Tutorial > Hauptteil

sammeln! Wird in Interviews verwendet, häufig gestellte Fragen zu MySQL-Interviews

php是最好的语言
Freigeben: 2020-09-02 15:46:40
Original
3004 Leute haben es durchsucht

Im Folgenden finden Sie einige MySQL-Fragen, die in Interviews und Studien häufig auftauchen. Beispiel für die Optimierung einer SQL-Anweisung: 1) Versuchen Sie, die Operatoren != oder in der where-Klausel zu vermeiden, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt. 2) Versuchen Sie zu vermeiden, den Nullwert des Felds in der Where-Klausel zu beurteilen, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt, z. B.: Wählen Sie ID aus T aus, wobei Num Null ist

【 Empfehlungen zu verwandten Themen: MySQL-Interviewfragen (2020)]

1. Primärschlüssel-Superschlüssel-Kandidatenschlüssel Fremdschlüssel

Primärschlüssel:

Eine Kombination von Datenspalten oder Attributen in einer Datenbanktabelle, die das gespeicherte Datenobjekt eindeutig und vollständig identifiziert. Eine Datenspalte kann nur einen Primärschlüssel haben und der Wert des Primärschlüssels darf nicht fehlen, d. h. er darf nicht null sein.

Superschlüssel:

Der Satz von Attributen, der ein Tupel in einer Beziehung eindeutig identifizieren kann, wird als Superschlüssel des relationalen Schemas bezeichnet. Ein Attribut kann als Superschlüssel verwendet werden, und auch die Kombination mehrerer Attribute kann als Superschlüssel verwendet werden. Superschlüssel enthält Kandidatenschlüssel und Primärschlüssel.

Kandidatenschlüssel:

ist ein Minimal-Superschlüssel, d. h. ein Superschlüssel ohne redundante Elemente.

Fremdschlüssel:

Der Primärschlüssel einer anderen Tabelle , der in einer Tabelle vorhanden ist, wird als Fremdschlüssel dieser Tabelle bezeichnet.

Vier Merkmale und Bedeutungen von Datenbanktransaktionen

Vier Grundelemente für die korrekte Ausführung von Datenbanktransaktionen. SÄURE, Atomarität, Korrespondenz, Isolation, Haltbarkeit.
Atomizität: Alle Vorgänge in der gesamten Transaktion sind entweder abgeschlossen oder nicht abgeschlossen, und es ist unmöglich, in einer Zwischenverbindung zu stagnieren. Wenn während der Ausführung der Transaktion ein Fehler auftritt, wird sie auf den Zustand vor Beginn der Transaktion zurückgesetzt, als ob die Transaktion nie ausgeführt worden wäre.
Konsistenz: Die Integritätsbeschränkungen der Datenbank werden vor Beginn der Transaktion und nach Ende der Transaktion nicht verletzt.
Isolation: Ein isolierter Zustand führt Transaktionen aus, als wären sie die einzigen Vorgänge, die das System zu einem bestimmten Zeitpunkt ausführt. Wenn zwei Transaktionen gleichzeitig ausgeführt werden und dieselbe Funktion ausführen, stellt die Transaktionsisolation sicher, dass jede Transaktion im System denkt, dass nur diese Transaktion das System verwendet. Diese Eigenschaft wird manchmal als Serialisierung bezeichnet. Um Verwechslungen zwischen Transaktionsvorgängen zu vermeiden, müssen Anforderungen serialisiert oder deserialisiert werden, sodass jeweils nur eine Anforderung für dieselben Daten vorliegt.
Persistenz: Nach Abschluss der Transaktion bleiben die von der Transaktion an der Datenbank vorgenommenen Änderungen in der Datenbank bestehen und werden nicht zurückgesetzt.

3. Die Rolle der Ansicht Kann die Ansicht geändert werden?

Eine Ansicht ist eine virtuelle Tabelle, die Daten enthält. Eine Ansicht enthält nur Abfragen, die bei Verwendung dynamisch Daten abrufen. Durch die Verwendung von Ansichten können komplexe SQL-Vorgänge vereinfacht, bestimmte Details ausgeblendet und Daten geschützt werden. Sobald Ansichten erstellt wurden, können sie auf die gleiche Weise wie Tabellen verwendet werden.
Ansichten können weder indiziert werden noch können ihnen zugeordnete Auslöser oder Standardwerte zugewiesen werden. Wenn in der Ansicht selbst „Ordnung nach“ vorhanden ist, wird die Reihenfolge in der Ansicht erneut überschrieben.
Ansicht erstellen: Erstellen Sie Ansicht Die Basistabelle dient jedoch hauptsächlich dazu, das Abrufen zu vereinfachen und Daten zu schützen. Sie wird jedoch nicht für Aktualisierungen verwendet, und die meisten Ansichten können nicht aktualisiert werden.

4. Der Unterschied zwischen „Drop“, „Delete“ und „Truncate“

Drop löscht die Tabelle direkt und „Truncate“ löscht die Daten in der Tabelle. Beim erneuten Einfügen erhöht sich die ID automatisch von 1 und „Delete“ löscht die Daten in der Tabelle können Sie hinzufügen, wo Wörter.

(1) Die DELETE-Anweisung löscht jeweils eine Zeile aus der Tabelle und speichert gleichzeitig den Löschvorgang der Zeile als Transaktionsdatensatz im Protokoll für den Rollback-Vorgang. TRUNCATE TABLE löscht alle Daten auf einmal aus der Tabelle und zeichnet einzelne Löschvorgangsdatensätze nicht im Protokoll auf. Gelöschte Zeilen können nicht wiederhergestellt werden. Und der Löschauslöser für die Tabelle wird während des Löschvorgangs nicht aktiviert. Die Ausführungsgeschwindigkeit ist hoch.

(2) Der von Tabellen und Indizes belegte Platz. Wenn eine Tabelle TRUNCATE ist, wird der von der Tabelle und den Indizes belegte Speicherplatz auf die ursprüngliche Größe zurückgesetzt, und der DELETE-Vorgang verringert nicht den von der Tabelle oder den Indizes belegten Speicherplatz. Die Drop-Anweisung gibt den gesamten von der Tabelle belegten Speicherplatz frei.

(3) Im Allgemeinen löschen > abschneiden > löschen

(4) Anwendungsbereich. TRUNCATE kann nur für TABLE verwendet werden; DELETE kann für Tabelle und Ansicht verwendet werden

(5) TRUNCATE und DELETE löschen nur Daten, während DROP die gesamte Tabelle (Struktur und Daten) löscht.

(6) Abschneiden und Löschen ohne Wo: Löschen Sie nur die Daten, nicht jedoch die Struktur (Definition) der Tabelle. Die Drop-Anweisung löscht die Einschränkungen (Constraint) und den Trigger-Index (Index) der Tabelle Struktur abhängig von. );Die gespeicherten Prozeduren/Funktionen, die von der Tabelle abhängen, bleiben erhalten, ihr Status wird jedoch: ungültig.

(7) Die Löschanweisung ist DML (Datenpflegesprache). Dieser Vorgang wird im Rollback-Segment platziert und wird erst wirksam, nachdem die Transaktion übermittelt wurde. Wenn ein entsprechender Tigger vorhanden ist, wird dieser während der Ausführung ausgelöst.

(8) Abschneiden und Löschen sind DLLs (Daten definieren Sprache), und die Vorgänge werden sofort wirksam. Die Originaldaten werden nicht im Rollback-Segment platziert und können nicht zurückgesetzt werden

(9 ) Wenn kein Backup vorhanden ist, verwenden Sie Drop und Truncate mit Vorsicht. Um einige Datenzeilen zu löschen, verwenden Sie „delete“ und kombinieren Sie es mit „wo“, um den Einflussbereich einzuschränken. Das Rollback-Segment muss groß genug sein. Um eine Tabelle zu löschen, verwenden Sie „Drop“. Wenn Sie die Tabelle beibehalten, aber die Daten in der Tabelle löschen möchten, verwenden Sie „Truncate“, wenn dies nichts mit der Transaktion zu tun hat. Wenn es sich um eine Transaktion handelt oder der Lehrer einen Auslöser auslösen möchte, verwenden Sie dennoch die Löschfunktion.

(10) Das Abschneiden der Tabelle „Tabellenname“ ist schnell und effizient, weil:
Das Abschneiden der Tabelle ist funktionell mit der DELETE-Anweisung ohne WHERE-Klausel identisch: Beide löschen alle Zeilen in der Tabelle. Allerdings ist TRUNCATE TABLE schneller als DELETE und verbraucht weniger System- und Transaktionsprotokollressourcen. Die DELETE-Anweisung löscht jeweils eine Zeile und zeichnet für jede gelöschte Zeile einen Eintrag im Transaktionsprotokoll auf. TRUNCATE TABLE löscht Daten, indem es die Datenseiten freigibt, die zum Speichern von Tabellendaten verwendet werden, und zeichnet nur die Seitenfreigabe im Transaktionsprotokoll auf.

(11) TRUNCATE TABLE löscht alle Zeilen in der Tabelle, aber die Tabellenstruktur und ihre Spalten, Einschränkungen, Indizes usw. bleiben unverändert. Der zum Identifizieren neuer Zeilen verwendete Zähler wird auf den Startwert dieser Spalte zurückgesetzt. Wenn Sie den Wert der Identitätsanzahl beibehalten möchten, verwenden Sie stattdessen DELETE. Wenn Sie eine Tabellendefinition und ihre Daten löschen möchten, verwenden Sie die DROP TABLE-Anweisung.

(12) Für Tabellen, auf die durch FOREIGN KEY-Einschränkungen verwiesen wird, kann TRUNCATE TABLE nicht verwendet werden, es sollte jedoch eine DELETE-Anweisung ohne WHERE-Klausel verwendet werden. Da TRUNCATE TABLE nicht protokolliert wird, kann der Trigger nicht aktiviert werden.

5. Das Funktionsprinzip und die Arten von Indizes

Datenbankindex ist eine sortierte Datenstruktur im Datenbankverwaltungssystem, die bei der schnellen Abfrage und Aktualisierung von Datenbanktabellendaten hilft . Die Implementierung des Index verwendet normalerweise den B-Baum und seine Variante B+-Baum.

Zusätzlich zu den Daten verwaltet das Datenbanksystem auch Datenstrukturen, die bestimmte Suchalgorithmen erfüllen. Diese Datenstrukturen verweisen auf die Daten in irgendeiner Weise, sodass erweiterte Suchalgorithmen auf diese Datenstrukturen implementiert werden können . Diese Datenstruktur ist ein Index.

Für das Setzen von Indizes auf Tabellen fallen Kosten an: Erstens erhöht es den Speicherplatz der Datenbank und zweitens nimmt das Einfügen und Ändern von Daten mehr Zeit in Anspruch (da sich auch der Index entsprechend ändert).

sammeln! Wird in Interviews verwendet, häufig gestellte Fragen zu MySQL-Interviews

Die Abbildung zeigt eine mögliche Indizierungsmethode. Auf der linken Seite befindet sich eine Datentabelle mit insgesamt zwei Spalten und sieben Datensätzen. Die Spalte ganz links ist die physische Adresse des Datensatzes (beachten Sie, dass logisch benachbarte Datensätze nicht unbedingt physisch benachbart auf der Festplatte liegen). Um die Suche nach Col2 zu beschleunigen, können Sie einen binären Suchbaum pflegen, wie rechts gezeigt. Jeder Knoten enthält den Indexschlüsselwert und einen Zeiger auf die physische Adresse des entsprechenden Datensatzes in O(log2n erhalten).

Das Erstellen von Indizes kann die Systemleistung erheblich verbessern.

Erstens kann durch die Erstellung eines eindeutigen Index die Eindeutigkeit jeder Datenzeile in der Datenbanktabelle garantiert werden.

Zweitens kann es den Datenabruf erheblich beschleunigen, was auch der Hauptgrund für die Erstellung eines Index ist.

Drittens kann es die Verbindung zwischen Tabellen beschleunigen, was besonders wichtig ist, um die referenzielle Integrität von Daten zu erreichen.

Viertens kann durch die Verwendung von Gruppierungs- und Sortierklauseln zum Datenabruf auch die Zeit für das Gruppieren und Sortieren in der Abfrage erheblich verkürzt werden.

Fünftens können Sie durch die Verwendung von Indizes Optimierungs-Hider während des Abfrageprozesses verwenden, um die Systemleistung zu verbessern.

Manche Leute fragen sich vielleicht: Das Hinzufügen eines Indexes hat so viele Vorteile, warum nicht für jede Spalte in der Tabelle einen Index erstellen? Denn das Hinzufügen von Indizes hat auch viele Nachteile.

Erstens nimmt die Erstellung und Pflege von Indizes Zeit in Anspruch, und diese Zeit nimmt mit zunehmender Datenmenge zu.

Zweitens muss der Index zusätzlich zum von der Datentabelle belegten Datenspeicherplatz auch einen bestimmten physischen Speicherplatz belegen benötigt wird größer sein.

Drittens muss beim Hinzufügen, Löschen und Ändern von Daten in der Tabelle der Index dynamisch verwaltet werden, was die Datenpflegegeschwindigkeit verringert.

Indizes werden für bestimmte Spalten in der Datenbanktabelle erstellt. Wenn Sie einen Index erstellen, sollten Sie berücksichtigen, welche Spalten indiziert werden können und welche nicht. Im Allgemeinen sollten Indizes für diese Spalten erstellt werden: Bei Spalten, die häufig durchsucht werden, können Sie die Suche beschleunigen; bei Spalten, die als Primärschlüssel dienen, können Sie die Eindeutigkeit der Spalte erzwingen und die Daten organisieren In der Tabellenstruktur handelt es sich bei diesen Spalten hauptsächlich um Fremdschlüssel, wodurch die Verbindung beschleunigt werden kann, da der Index häufig durchsucht werden muss sortiert, und der angegebene Bereich ist kontinuierlich; Erstellen Sie Indizes für Spalten, die häufig sortiert werden müssen, sodass Abfragen die Sortierung des Index verwenden können, um die Sortierabfragezeit zu beschleunigen Wird häufig in der WHERE-Klausel verwendet, um die Beurteilung von Bedingungen zu beschleunigen.

Außerdem gibt es einige Spalten, die nicht indiziert werden sollten. Im Allgemeinen weisen diese Spalten, die nicht indiziert werden sollten, die folgenden Merkmale auf:

Erstens sollten keine Indizes für Spalten erstellt werden, die in Abfragen selten verwendet oder referenziert werden. Dies liegt daran, dass diese Spalten nur selten verwendet werden und eine Indizierung oder Nicht-Indizierung die Abfragegeschwindigkeit nicht verbessert. Im Gegenteil: Durch das Hinzufügen von Indizes wird die Wartungsgeschwindigkeit des Systems verringert und der Platzbedarf erhöht.

Zweitens sollten Indizes für Spalten mit wenigen Datenwerten nicht erhöht werden. Dies liegt daran, dass die Datenzeilen im Ergebnissatz einen großen Teil der Datenzeilen in der Tabelle ausmachen, da diese Spalten in den Abfrageergebnissen nur sehr wenige Werte enthalten, z. B. die Geschlechtsspalte der Personaltabelle. Die Daten, die in der Tabelle durchsucht werden müssen. Der Anteil der Zeilen ist riesig. Durch Erhöhen des Index wird der Abruf nicht wesentlich beschleunigt.

Drittens sollten keine Indizes zu Spalten hinzugefügt werden, die als Text-, Bild- und Bit-Datentypen definiert sind. Dies liegt daran, dass das Datenvolumen dieser Spalten entweder recht groß ist oder nur sehr wenige Werte aufweist.

Viertens sollte der Index nicht erstellt werden, wenn die Änderungsleistung viel größer ist als die Abrufleistung. Dies liegt daran, dass Änderungsleistung und Abrufleistung widersprüchlich sind . Beim Hinzufügen von Indizes wird die Abrufleistung verbessert, die Änderungsleistung wird jedoch verringert. Beim Reduzieren von Indizes erhöht sich die Änderungsleistung und die Abrufleistung verringert sich. Daher sollten keine Indizes erstellt werden, wenn die Änderungsleistung viel höher ist als die Abrufleistung.

Abhängig von der Funktionalität der Datenbank können im Datenbankdesigner drei Arten von Indizes erstellt werden: Eindeutiger Index, Primärschlüsselindex und Clustered-Index.

Eindeutiger Index

Ein eindeutiger Index ist ein Index, der nicht zulässt, dass zwei Zeilen denselben Indexwert haben.

Die meisten Datenbanken erlauben nicht, dass neu erstellte eindeutige Indizes mit der Tabelle gespeichert werden, wenn in den vorhandenen Daten doppelte Schlüsselwerte vorhanden sind. Die Datenbank verhindert möglicherweise auch das Hinzufügen neuer Daten, die zu doppelten Schlüsselwerten in der Tabelle führen würden. Wenn beispielsweise ein eindeutiger Index für den Nachnamen des Mitarbeiters (lname) in der Mitarbeitertabelle erstellt wird, können keine zwei Mitarbeiter denselben Nachnamen haben. Primärschlüsselindex Datenbanktabellen haben oft eine Spalte oder eine Kombination von Spalten, deren Wert jede Zeile in der Tabelle eindeutig identifiziert. Diese Spalte wird als Primärschlüssel der Tabelle bezeichnet. Durch das Definieren eines Primärschlüssels für eine Tabelle in einem Datenbankdiagramm wird automatisch ein Primärschlüsselindex erstellt, bei dem es sich um einen bestimmten Typ eines eindeutigen Index handelt. Der Index erfordert, dass jeder Wert im Primärschlüssel eindeutig ist. Es ermöglicht auch einen schnellen Zugriff auf Daten, wenn in Abfragen ein Primärschlüsselindex verwendet wird. Clustered Index In einem Clustered Index ist die physische Reihenfolge der Zeilen in der Tabelle dieselbe wie die logische (Index-)Reihenfolge der Schlüsselwerte. Eine Tabelle kann nur einen Clustered-Index enthalten.

Wenn ein Index kein Clustered-Index ist, stimmt die physische Reihenfolge der Zeilen in der Tabelle nicht mit der logischen Reihenfolge der Schlüsselwerte überein. Clustered-Indizes bieten im Allgemeinen einen schnelleren Datenzugriff im Vergleich zu nicht gruppierten Indizes.

Lokalitätsprinzip und Disk Read Ahead

Aufgrund der Eigenschaften des Speichermediums ist der Zugriff auf die Festplatte selbst viel langsamer als auf den Hauptspeicher, verbunden mit den Kosten für die mechanische Bewegung Die Geschwindigkeit des Festplattenzugriffs beträgt oft ein Hundertstel der Geschwindigkeit des Hauptspeichers. Um die Effizienz zu verbessern, sollte die Festplatten-E/A minimiert werden. Um dieses Ziel zu erreichen, liest die Festplatte häufig nicht ausschließlich bei Bedarf, sondern jedes Mal im Voraus. Auch wenn nur ein Byte benötigt wird, beginnt die Festplatte an dieser Position und liest sequentiell eine bestimmte Länge an Daten rückwärts Erinnerung. Die theoretische Grundlage dafür ist das berühmte Lokalitätsprinzip in der Informatik: Wenn ein Datenelement verwendet wird, werden die Daten in der Nähe normalerweise sofort verwendet. Die während der Programmausführung benötigten Daten sind in der Regel konzentriert.

Da sequentielle Lesevorgänge auf der Festplatte sehr effizient sind (keine Suchzeit, sehr kurze Spin-Zeit), kann das Vorauslesen die E/A für Programme mit Lokalitätseffizienz verbessern.

Die Read-Ahead-Länge ist im Allgemeinen ein ganzzahliges Vielfaches der Seite. Seiten sind logische Blöcke computerverwalteten Speichers. Hardware und Betriebssysteme unterteilen häufig Hauptspeicher- und Festplattenspeicherbereiche in aufeinanderfolgende gleich große Blöcke. Jeder Speicherblock wird als Seite bezeichnet (in vielen Betriebssystemen beträgt die Seitengröße normalerweise 4 KB). Hauptspeicher und Festplattenaustauschdaten in Seiteneinheiten. Wenn sich die vom Programm zu lesenden Daten nicht im Hauptspeicher befinden, wird eine Seitenfehlerausnahme ausgelöst. Zu diesem Zeitpunkt sendet das System ein Lesesignal an die Festplatte und die Festplatte findet die Startposition der Daten und eine oder mehrere Seiten rückwärts lesen, dann abnormal zurückkehren und das Programm weiter ausführen.

Leistungsanalyse des B-/+Tree-Index

An diesem Punkt können wir endlich die Leistung des B-/+Tree-Index analysieren.

Wie oben erwähnt, wird die Anzahl der Festplatten-E/As im Allgemeinen zur Bewertung der Qualität der Indexstruktur verwendet. Beginnen wir mit der B-Tree-Analyse. Gemäß der Definition von B-Tree ist ersichtlich, dass für einen Abruf maximal h Knoten besucht werden müssen. Die Designer des Datenbanksystems machten sich geschickt das Disk-Read-Ahead-Prinzip zunutze und legten die Größe eines Knotens auf eine Seite fest, sodass jeder Knoten mit nur einem I/O vollständig geladen werden kann. Um dieses Ziel zu erreichen, müssen bei der tatsächlichen Implementierung von B-Tree die folgenden Techniken verwendet werden:

Beantragen Sie bei jeder Erstellung eines neuen Knotens direkt eine Seite mit Speicherplatz, um sicherzustellen, dass ein Knoten vorhanden ist wird physisch auf einer Seite gespeichert. Darüber hinaus ist die Speicherzuweisung des Computers seitenorientiert, was bedeutet, dass nur eine E/A für einen Knoten erforderlich ist.

Ein Abruf im B-Tree erfordert höchstens h-1 I/O (der Wurzelknoten befindet sich im Speicher), und die asymptotische Komplexität ist O(h)=O(log dN). In allgemeinen praktischen Anwendungen ist der Außengrad d eine sehr große Zahl, normalerweise mehr als 100, daher ist h sehr klein (normalerweise nicht mehr als 3).

Bei Strukturen wie rot-schwarzen Bäumen ist h offensichtlich viel tiefer. Da logisch nahe Knoten (Eltern und Kinder) physisch weit entfernt sein können, kann die Lokalität nicht ausgenutzt werden, sodass die asymptotische E/A-Komplexität des rot-schwarzen Baums ebenfalls O (h) ist und die Effizienz offensichtlich viel schlechter ist als die von der B-Baum.

Zusammenfassend ist die Verwendung von B-Tree als Indexstruktur sehr effizient.

6. Arten von Verbindungen

Ausgeführt im Abfrageanalysator:
–Tabellen erstellen Tabelle1, Tabelle2:
Tabelle erstellen Tabelle1(ID int, Name varchar(10))
Tabelle erstellen table2(id int,score int)
insert into table1 select 1,'lee'
insert into table1 select 2,'zhang'
insert into table1 select 4,'wang'
insert into table2 1,90 auswählen
In Tabelle2 einfügen 2.100 auswählen
In Tabelle2 einfügen 3,70 auswählen
wie Tabelle
————————————————-
Tabelle1 |. Tabelle2 |
——————————————-
ID-Name |ID-Punktzahl |
1 Lee |1 90|
2 Zhang| 100|
4 wang|.
———————————————-

Die folgenden werden alle im Abfrageanalysator ausgeführt
1 . Outer Join
1. Konzept: Left Outer Join, Right Outer Join oder Complete Outer Join

2. Left Join: Left Outer Join oder Left Outer Join
(1) Left Outer Join set enthält alle Zeilen aus der linken Tabelle, die in der LEFT OUTER-Klausel angegeben ist, nicht nur die Zeilen, die mit den Join-Spalten übereinstimmen. Wenn eine Zeile in der linken Tabelle keine passende Zeile in der rechten Tabelle hat, sind alle Auswahllistenspalten der rechten Tabelle in der zugehörigen Ergebnissatzzeile null.
(2)SQL-Anweisung
select * from table1 left join table2 on table1.id=table2.id
————-Result————-
idnameidscore
——— — ————————
1lee190
2zhang2100
4wangNULLNULL
——————————
Hinweis: Enthält alle Klauseln von Tabelle1 und gibt Tabelle2 entsprechend zurück Die angegebenen Bedingungen Felder, die nicht übereinstimmen, werden als null angezeigt

3 Rechter Join: rechter Join oder rechter äußerer Join
(1) Der rechte äußere Join ist der umgekehrte Join des linken äußeren Joins. Alle Zeilen aus der rechten Tabelle werden zurückgegeben. Wenn eine Zeile in der rechten Tabelle keine passende Zeile in der linken Tabelle hat, wird NULL für die linke Tabelle zurückgegeben.
(2)SQL-Anweisung
select * from table1 right join table2 on table1.id=table2.id
————-Result————-
idnameidscore
——— — ————————
1lee190
2zhang2100
NULLNULL370
——————————
Hinweis: Enthält alle Klauseln von Tabelle2 und gibt Tabelle1 entsprechend zurück Die angegebenen Bedingungen Felder, die nicht übereinstimmen, werden als Null angezeigt

4. Vollständiger äußerer Join: vollständiger Join oder vollständiger äußerer Join
(1) Vollständiger äußerer Join gibt alle Zeilen in der linken und rechten Tabelle zurück. Wenn es für eine Zeile keine passende Zeile in einer anderen Tabelle gibt, enthält die Auswahllistenspalte der anderen Tabelle Nullwerte. Wenn zwischen Tabellen übereinstimmende Zeilen vorhanden sind, enthält die gesamte Ergebnissatzzeile die Datenwerte der Basistabelle.
(2)SQL-Anweisung
select * from table1 full join table2 on table1.id=table2.id
————-Result————-
idnameidscore
——————————
1lee190
2zhang2100
4wangNULLNULL
NULLNULL370
——————————
Hinweis: Gehen Sie nach links zurück und rechte Verbindungen und (siehe linke und rechte Verknüpfungen oben)

2. Innere Verknüpfungen
1. Konzept: Innere Verknüpfungen sind Verknüpfungen, die Vergleichsoperatoren verwenden, um die Werte der zu vergleichenden Spalten zu vergleichen verbunden

2.Inner Join: Join oder Inner Join

3.sql-Anweisung
select * from table1 join table2 on table1.id=table2.id
———— -Ergebnis———— -
idnameidscore
——————————
1lee190
2zhang2100
——————————
Hinweis: Gibt nur Übereinstimmungen mit bedingten Spalten von Tabelle1 und Tabelle2 zurück

4. Äquivalent (gleicher Ausführungseffekt wie folgt)
A: Wählen Sie a.*,b.* aus Tabelle1 a,Tabelle2 aus b where a.id =b.id
B:select * from table1 cross joint table2 where table1.id=table2.id (Hinweis: Sie können where nur verwenden, um Bedingungen nach dem Cross-Join hinzuzufügen, nicht on)

3. Cross-Join(vollständig)

1. Konzept: Ein Cross-Join ohne WHERE-Klausel erzeugt ein kartesisches Produkt der beteiligten Tabellen verbinden. Die Anzahl der Zeilen in der ersten Tabelle multipliziert mit der Anzahl der Zeilen in der zweiten Tabelle ergibt die Größe der Ergebnismenge des kartesischen Produkts. (Der Cross-Join von Tabelle1 und Tabelle2 erzeugt 3*3=9 Datensätze)

2. Cross-Join: Cross-Join (ohne Bedingung, wo...)

3 .sql-Anweisung
wählen Sie * aus Tabelle1 Cross-Join-Tabelle2 aus
————-Ergebnis————-
idnameidscore
——————————
1lee190
2zhang190
4wang190
1lee2100
2zhang2100
4wang2100
1lee370
2zhang370
4wang370
——————————
Hinweis: Rückgabe 3 *3 =9 Datensätze, also kartesisches Produkt

4 Äquivalent (gleicher Ausführungseffekt wie folgt)
A: Wählen Sie * aus Tabelle1, Tabelle2

7. Datenbankparadigma

1 Erste Normalform (1NF)

In jeder relationalen Datenbank ist die erste Normalform (1NF) das Grundvoraussetzungen für das relationale Modell , eine Datenbank, die nicht der ersten Normalform (1NF) entspricht, ist keine relationale Datenbank.
Die sogenannte erste Normalform (1NF) bedeutet, dass jede Spalte der Datenbanktabelle ein unteilbares Basisdatenelement ist. Es kann nicht mehrere Werte in derselben Spalte geben, das heißt, ein Attribut in der Entität kann nicht vorhanden sein mehrere Werte haben oder keine doppelten Attribute haben können. Wenn doppelte Attribute auftreten, müssen Sie möglicherweise eine neue Entität definieren. Die neue Entität besteht aus doppelten Attributen. Es besteht eine Eins-zu-viele-Beziehung zwischen der neuen Entität und der ursprünglichen Entität. In der ersten Normalform (1NF) enthält jede Zeile der Tabelle Informationen zu nur einer Instanz. Kurz gesagt: Die erste Normalform ist eine Spalte ohne Duplikate.

2 Zweite Normalform (2NF)

Die zweite Normalform (2NF) ist auf der Grundlage der ersten Normalform (1NF) aufgebaut Um die zweite Normalform (2NF) zu erfüllen, müssen Sie zunächst die erste Normalform (1NF) erfüllen. Die zweite Normalform (2NF) erfordert, dass jede Instanz oder Zeile in einer Datenbanktabelle eindeutig unterscheidbar sein muss. Um eine Differenzierung zu erreichen, ist es normalerweise erforderlich, der Tabelle eine Spalte hinzuzufügen, in der die eindeutige Kennung jeder Instanz gespeichert wird. Diese eindeutige Attributspalte wird als Primärschlüssel oder Primärschlüssel oder Primärschlüssel bezeichnet.
Die zweite Normalform (2NF) erfordert, dass die Attribute einer Entität vollständig vom Primärschlüssel abhängen. Die sogenannte vollständige Abhängigkeit bedeutet, dass es kein Attribut geben kann, das nur von einem Teil des Primärschlüssels abhängt. Wenn es existiert, sollten dieses Attribut und dieser Teil des Primärschlüssels getrennt werden, um eine neue Entität zu bilden Die ursprüngliche Entität ist eine Eins-zu-Viele-Beziehung. Um eine Differenzierung zu erreichen, ist es normalerweise erforderlich, der Tabelle eine Spalte hinzuzufügen, in der die eindeutige Identifikation jeder Instanz gespeichert wird. Kurz gesagt: Zweite Normalform bedeutet, dass nicht-primäre Attribute nicht teilweise vom primären Schlüsselwort abhängen.

3 Dritte Normalform (3NF)

Um die dritte Normalform (3NF) zu erfüllen, müssen Sie zuerst die zweite Normalform (2NF) erfüllen. Kurz gesagt, die dritte Normalform (3NF) erfordert, dass eine Datenbanktabelle keine Nicht-Primärschlüsselinformationen enthält, die bereits in anderen Tabellen enthalten sind. Beispielsweise gibt es eine Abteilungsinformationstabelle, in der jede Abteilung die Abteilungsnummer (dept_id), den Abteilungsnamen, das Abteilungsprofil und andere Informationen enthält. Nachdem die Abteilungsnummer in der Mitarbeiterinformationstabelle aufgeführt ist, können der Abteilungsname, das Abteilungsprofil und andere abteilungsbezogene Informationen nicht mehr zur Mitarbeiterinformationstabelle hinzugefügt werden. Wenn die Abteilungsinformationstabelle nicht vorhanden ist, sollte sie gemäß der dritten Normalform (3NF) erstellt werden, da sonst eine große Datenredundanz auftritt. Kurz gesagt: Die dritte Normalform besagt, dass Attribute nicht von anderen nicht-primären Attributen abhängen. (Mein Verständnis besteht darin, Redundanz zu beseitigen)

8 Die Idee der Datenbankoptimierung

Ich habe auf den Kurs zur Datenbankoptimierung auf MOOC zurückgegriffen.

1. SQL-Anweisungsoptimierung

1) Vermeiden Sie die Verwendung von !=- oder -Operatoren in where-Klauseln, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt .
2) Versuchen Sie zu vermeiden, den Nullwert von Feldern in der where-Klausel zu beurteilen, da die Engine sonst die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt, wie zum Beispiel:
Wählen Sie die ID aus t aus, wobei die Anzahl null ist
Sie können den Standardwert 0 für „num“ festlegen, sicherstellen, dass in der Spalte „num“ in der Tabelle kein Nullwert vorhanden ist und dann eine Abfrage wie folgt durchführen:
Wählen Sie die ID aus t aus, wobei num=0 ist
3) Oft wird „exists“ anstelle von „in“ verwendet. Eine gute Wahl
4) Ersetzen Sie die HAVING-Klausel durch die Where-Klausel, da HAVING die Ergebnismenge erst filtert, nachdem alle Datensätze abgerufen wurden

2. Indexoptimierung

Siehe Index oben

3. Optimierung der Datenbankstruktur

1) Paradigmenoptimierung: z. B. Eliminierung von Redundanz (Platzersparnis ...) 2) Anti-Paradigma-Optimierung: z. B. Hinzufügen geeigneter Redundanz (Reduzierung von Verknüpfungen) 3) Aufteilen der Tabelle: Partitionen trennen Daten physisch in verschiedenen Partitionen und können in Datendateien auf verschiedenen Festplatten gespeichert werden. Auf diese Weise müssen Sie beim Abfragen dieser Tabelle nur die Tabellenpartition scannen, anstatt die gesamte Tabelle zu scannen, was die Abfragezeit erheblich verkürzt. Darüber hinaus wird die Datenübertragung dieser Tabelle durch die Partitionen auf verschiedenen Festplatten unterschiedlich verteilt An mehreren Stellen kann eine sorgfältig konfigurierte Partition die Datenübertragungskonkurrenz für Festplatten-E/A gleichmäßig verteilen. Diese Methode kann für Fahrpläne mit großen Datenmengen verwendet werden. Tabellenpartitionen können monatlich automatisch erstellt werden.
4) Die Aufteilung wird tatsächlich in vertikale Aufteilung und horizontale Aufteilung unterteilt: Fall: Ein einfaches Einkaufssystem umfasst vorübergehend die folgenden Tabellen: 1. Produkttabelle (Datenvolumen: 100.000, stabil) 2. Bestelltabelle (Datenvolumen: 2 Millionen). , und Es gibt einen Wachstumstrend) 3. Benutzertabelle (das Datenvolumen beträgt 1 Million, und es gibt einen Wachstumstrend) Nehmen Sie MySQL als Beispiel, um die horizontale Aufteilung und die vertikale Aufteilung zu beschreiben. Die Größenordnung, die MySQL tolerieren kann, reicht von Eine Million statische Daten in mehrere zehn Millionen Vertikale Aufteilung: Lösen Sie das Problem: Der Wettbewerb zwischen Tabellen löst das Problem nicht: Der Druck, der durch die Zunahme der Datenmenge in einer einzelnen Tabelle verursacht wird, Lösung: Setzen Sie die Produkttabelle und Benutzertabelle auf einem Server und die Bestelltabelle auf einem separaten Server. Auf Horizontale Aufteilung: Lösen Sie das Problem: Der Druck, der durch das Wachstum des Datenvolumens in einer einzelnen Tabelle verursacht wird, löst das Problem nicht: io-Wettbewerb zwischen Tabellen
Lösung: Die Benutzertabelle wird nach Geschlecht in die Tabelle der männlichen Benutzer aufgeteilt. Die Bestelltabelle der weiblichen Benutzertabelle wird in abgeschlossene und nicht abgeschlossene Bestellungen unterteilt. Die Produkttabelle und die nicht abgeschlossenen Bestellungen werden aufgegeben Ein Server. Die fertige Bestelltabelle wird auf einem Server platziert. (Frauen lieben Einkaufen, haha)

Server-Hardwareoptimierung >

Das kostet viel Geld!

9. Der Unterschied zwischen gespeicherten Prozeduren und Triggern

Trigger sind ebenfalls Sätze von SQL-Anweisungen.

Der einzige Unterschied zwischen den beiden besteht darin, dass EXECUTE dies nicht kann kann in Trigger-Anweisungsaufrufen verwendet werden, löst (aktiviert) jedoch automatisch die Ausführung aus, wenn der Benutzer eine Transact-SQL-Anweisung ausführt. Ein Trigger ist eine gespeicherte Prozedur, die ausgeführt wird, wenn Daten in einer angegebenen Tabelle geändert werden. Normalerweise werden Trigger erstellt, um die referenzielle Integrität und Konsistenz logisch verknüpfter Daten in verschiedenen Tabellen durchzusetzen. Da Trigger von Benutzern nicht umgangen werden können, können sie zur Durchsetzung komplexer Geschäftsregeln zur Gewährleistung der Datenintegrität verwendet werden. Trigger unterscheiden sich von gespeicherten Prozeduren. Trigger werden hauptsächlich durch Ereignisausführungstrigger ausgeführt, während gespeicherte Prozeduren direkt über den Namen der gespeicherten Prozedur aufgerufen werden können. Wenn Vorgänge wie UPDATE, INSERT und DELETE für eine bestimmte Tabelle ausgeführt werden, führt SQLSERVER automatisch die durch den Trigger definierten SQL-Anweisungen aus und stellt so sicher, dass die Datenverarbeitung den durch diese SQL-Anweisungen definierten Regeln entsprechen muss. Verwandte Artikel:

Häufige Fragen zu PHP-Interviews

Häufige Fragen zu jQuery-Interviews

Ähnliche Videos:

Datenbank-MySQL-Video-Tutorial

Das obige ist der detaillierte Inhalt vonsammeln! Wird in Interviews verwendet, häufig gestellte Fragen zu MySQL-Interviews. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage