Heim  >  Artikel  >  Datenbank  >  MYSQL-Interviewfragen (1)

MYSQL-Interviewfragen (1)

小云云
小云云Original
2018-03-22 13:17:464240Durchsuche

In diesem Artikel werden hauptsächlich MYSQL-Interviewfragen (1) mit Ihnen geteilt, in der Hoffnung, Ihnen zu helfen.

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

1. So entwerfen Sie ein System mit hoher Parallelität

Optimierung der Datenbank, einschließlich angemessener Transaktionsisolationsstufe, SQL Anweisungsoptimierung, Indexoptimierung

Cache verwenden, um Datenbank zu minimieren IO

Verteilt Datenbank, verteilter Cache

Serverlastausgleich

2 . Sperroptimierungsstrategie

① Lese- und Schreibtrennung

② Segmentierte Sperre

③ Reduzieren Sie die Sperrhaltezeit

④ Mehrere Threads sollten versuchen, Ressourcen in derselben Reihenfolge zu erhalten

usw. Dies sind keine absoluten Prinzipien und müssen auf der Situation basieren. Die Granularität ist beispielsweise nicht zu detailliert Andernfalls wird der Thread möglicherweise zu oft gesperrt und freigegeben, was nicht so effizient ist wie das Hinzufügen einer großen Sperre auf einmal. Ich habe lange mit dem Interviewer über diesen Teil gesprochen

3Die zugrunde liegenden Implementierungsprinzipien und die Optimierung von Indizes

B+ Baum, der optimierte B+ Baum

wird hauptsächlich in Zeigern auf den nächsten Blattknoten von allen Blattknoten hinzugefügt. Daher empfiehlt InnoDB die Verwendung des standardmäßigen automatisch inkrementierten Primärschlüssels Primärindex für die meisten Tabellen.

4. Wenn der Index festgelegt ist, aber nicht verwendet werden kann

① LIKE-Anweisung, die mit „%“ beginnt, Fuzzy-Matching

② Vor und nach der OR-Anweisung wird kein Index verwendet

③ Es erfolgt eine implizite Konvertierung des Datentyps (z. B. kann varchar automatisch in den Typ int ohne einfache Anführungszeichen konvertiert werden)

5 . Optimierung von SQL-Anweisungen

Wie man mit der Reihenfolge umgeht, indem

versuchen, mehrere Male zu einem zusammenzuführen

auch einfügen und löschen müssen zusammengeführt werden

Warten

6Wie man in der Praxis optimiertMySQL

Ich habe die folgenden vier Fragen der Reihe nach beantwortet. Was die Wirkung betrifft, hat die erste die größte Wirkung und die folgenden werden immer kleiner.

① SQLOptimierung von Anweisungen und Indizes

Optimierung der Datenbanktabellenstruktur

Optimierung der Systemkonfiguration

Optimierung der Hardware

Die Hauptmerkmale der SQL-Injektion

Es gibt viele Varianten, einfache Angriffe und großen Schaden

Die Hauptgefahren der SQL-Injektion

Ohne Berechtigung zum Betrieb von Datenbankdaten

Webseiten böswillig ändern

Systemkonten oder Datenbankbenutzerkonten privat hinzufügen

Trojaner auf Webseiten aufhängen

11. Methoden zur Optimierung der Datenbank

Acht Möglichkeiten zur Optimierung der MySQL-Datenbank (Klassiker, die man gesehen haben muss) klicken Sie hier get

· Wählen Sie das am besten geeignete Feldattribut aus, reduzieren Sie die definierte Feldbreite so weit wie möglich und versuchen Sie, sie festzulegen das Feld auf NOTNULL. Beispielsweise eignen sich „Provinz“ und „Geschlecht“ am besten für ENUM

· Verbindung verwenden (JOIN) anstelle der Unterabfrage

· Verwenden Sie Union (UNION), um die manuell erstellte temporäre Tabelle zu ersetzen

· Transaktionsverarbeitung

· Tabelle sperren, Transaktionsverarbeitung optimieren

· Fremdschlüssel anwenden, Schließtabellen optimieren

· Index erstellen

· Abfrageanweisung optimieren

19. Beschreiben Sie kurz MySQL, was sind die Unterschiede zwischen Indizes, Primärschlüsseln, eindeutigen Indizes und gemeinsamen Indizes und welche Auswirkungen sie auf die Datenbankleistung haben (sowohl aus Lese- als auch aus Schreibaspekten) (Sina Technology Department)

Indizes sind spezielle Dateien (Indizes für InnoDB-Datentabellen sind Bestandteil des Tabellenbereichs) und sie enthalten Referenzzeiger auf alle Datensätze in der Datentabelle.
Die einzige Aufgabe eines normalen Index (ein durch das Schlüsselwort KEY oder INDEX definierter Index) besteht darin, den Zugriff auf Daten zu beschleunigen.
Normale Indizes ermöglichen, dass die indizierten Datenspalten doppelte Werte enthalten. Wenn Sie sicher sein können, dass eine bestimmte Datenspalte nur voneinander verschiedene Werte enthält, sollten Sie beim Erstellen eines Index für diese Datenspalte das Schlüsselwort UNIQUE verwenden, um diesen als eindeutigen Index zu definieren. Mit anderen Worten: Ein eindeutiger Index kann die Einzigartigkeit von Datensätzen sicherstellen.
Der Primärschlüssel ist ein spezieller eindeutiger Index. In einer Tabelle kann nur ein Primärschlüsselindex definiert werden. Verwenden Sie zum Erstellen das Schlüsselwort PRIMARY KEY.
Der Index kann mehrere Datenspalten abdecken, z. B. den Index INDEX(SpalteA, SpalteB), bei dem es sich um einen gemeinsamen Index handelt.
Indizes können die Geschwindigkeit der Datenabfrage erheblich verbessern, verlangsamen jedoch die Geschwindigkeit des Einfügens, Löschens und Aktualisierens von Tabellen, da bei der Ausführung dieser Schreibvorgänge So bedienen Sie die Indexdatei.

20. Was ist eine Transaktion in einer Datenbank?

Transaktion (Transaktion) ist eine Gruppe von Einheiten als eine Einheit Ordentliche Datenbankoperationen. Eine Transaktion gilt als erfolgreich, wenn alle Vorgänge in der Gruppe erfolgreich sind. Auch wenn nur ein Vorgang fehlschlägt, ist die Transaktion nicht erfolgreich. Wenn alle Vorgänge abgeschlossen sind, wird die Transaktion festgeschrieben und ihre Änderungen werden auf alle anderen Datenbankprozesse angewendet. Wenn ein Vorgang fehlschlägt, wird die Transaktion zurückgesetzt und die Auswirkungen aller Vorgänge in der Transaktion werden aufgehoben. Die vier Hauptmerkmale von ACID sind Atomizität, Isolation, Konsistenz und Haltbarkeit.

21. Kennen Sie XSS-Angriffe? Wie kann man es verhindern?

XSS ist ein Cross-Site-Scripting-Angriff. Zunächst nutzt er eine Cross-Site-Scripting-Schwachstelle aus, um ein vom Angreifer erstelltes Skript in einem privilegierten Modus auszuführen, und verwendet es dann ein unsicheres ActiveX-Steuerelement zur Ausführung böswilligen Verhaltens.
Verwenden Sie die Funktion htmlspecialchars(), um den übermittelten Inhalt zu filtern und die Sondersymbole in der Zeichenfolge zu materialisieren.

22. Was verursacht SQL-Injection-Schwachstellen? Wie kann man es verhindern?

Ursache der SQL-Injection: Während des Programmentwicklungsprozesses haben Sie nicht auf das standardmäßige Schreiben von SQL-Anweisungen und das Filtern von Sonderzeichen geachtet, was dazu geführt hat, dass der Client dazu in der Lage war Um einige Daten über die globalen Variablen POST und GET zu übermitteln, wird die SQL-Anweisung normal ausgeführt.

Möglichkeiten zur Verhinderung von SQL-Injection:

Aktivieren Sie die Konfigurationsdatei magic_quotes_gpc- und magic_quotes_runtime-Einstellungen

Verwenden Sie Addslashes für die SQL-Anweisungskonvertierung, wenn Sie SQL-Anweisung ausführen

SQL-Anweisung schreiben Versuchen Sie es Doppelte und einfache Anführungszeichen dürfen nicht weggelassen werden.

Filtern Sie einige Schlüsselwörter in der SQL-Anweisung heraus: update, insert, delete, select, *.

Verbessern Sie die Benennungsfähigkeiten von Datenbanktabellen und -feldern entsprechend den Merkmalen des Programms, sodass sie schwer zu erraten sind.

Setzen Sie „register_globals“ in der PHP-Konfigurationsdatei auf „Off“ und deaktivieren Sie die globale Variablenregistrierung.

Kontrollieren Sie Fehlermeldungen und tun Sie dies nicht durchsuchen Fehlerinformationen auf dem Server ausgeben und in die Protokolldatei schreiben .

25. Für relationale Datenbanken ist die Indizierung ein sehr wichtiges Konzept:

a). Was ist der Zweck des Index?

Schneller Zugriff auf bestimmte Informationen in Datentabellen, um die Abrufgeschwindigkeit zu erhöhen

Erstellen Sie eindeutige A Der eindeutige Index stellt die Eindeutigkeit jeder Datenzeile in der Datenbanktabelle sicher.

Beschleunigen Sie Tabellen und Verknüpfungen zwischen Tabellen

Verwenden Sie Gruppierungs- und Sortierklauseln Beim Datenabruf kann der Zeitaufwand für das Gruppieren und Sortieren in Abfragen deutlich reduziert werden

b). Welche negativen Auswirkungen haben Indizes auf das Datenbanksystem?

Negative Auswirkung:
Index erstellen Die Wartung und Pflege von Indizes nimmt Zeit in Anspruch, und die Indizes müssen physischen Speicherplatz belegen. Nicht nur die Tabelle muss Datenspeicherplatz belegen, sondern jeder Index muss auch physischen Speicherplatz belegen, wenn er hinzugefügt, gelöscht oder gelöscht wird. Wenn Sie die Tabelle ändern oder ändern, muss der Index auch dynamisch verwaltet werden, was die Geschwindigkeit der Datenpflege verringert.

c). Was sind die Prinzipien für die Indizierung von Datentabellen?

Erstellen Sie einen Index für die am häufigsten verwendeten Felder, um den Umfang der Abfrage einzugrenzen.

Erstellen Sie Indizes für häufig verwendete Felder, die sortiert werden müssen

d) , Unter welchen Umständen ist es unangemessen, einen Index zu erstellen?

Es ist nicht angebracht, einen Index für Spalten zu erstellen, die selten an Abfragen beteiligt sind, oder für Spalten mit vielen doppelten Werten.

Für einige spezielle Datentypen ist es nicht geeignet, Indizes zu erstellen, z. B. Textfelder (Text) usw.

26. Beschreiben Sie kurz den Unterschied zwischen MyISAM und InnoDB in der MySQL-Datenbank

Das wichtigste Merkmal, das es von anderen unterscheidet Datenbanken ist die Plug-in-Tabellenspeicher-Engine. Denken Sie daran: Die Speicher-Engine basiert auf Tabellen, nicht auf Datenbanken.

Der Unterschied zwischen InnoDB und MyISAM:

InnoDB-Speicher-Engine: Main Für OLTP-Anwendungen (Online Transaction Processing) ist es die erste Speicher-Engine, die ACID-Transaktionen vollständig unterstützt (BDB war die erste Speicher-Engine, die Transaktionen unterstützte und hat die Entwicklung eingestellt).

Funktionen:

· Zeilensperre Entwerfen und unterstützen Sie Fremdschlüssel , unterstützen Sie Transaktionen, unterstützen Sie Parallelität und die Sperrgranularität unterstützt MVCC-Sperren auf Zeilenebene ;

MyISAM-Speicher-Engine: ist die offiziell von MySQL bereitgestellte Speicher-Engine, hauptsächlich für OLAP (Online Analytical Processing, Online-Analyse und -Verarbeitung). Anwendungen.
Funktionen:

Unterstützt keine Transaktionen,

Die Sperrgranularität unterstützt Sperren auf Tabellenebene für gleichzeitiges Einfügen und unterstützt Tabellen- und Volltextindizes. Schnelle Bedienung , kann nicht zu häufig lesen und schreiben ; 🎜>

27. Erklären Sie den Unterschied zwischen MySQL-Outer-Joins, Inner-Joins und Self-Joins

Lassen Sie uns zunächst über Cross-Join sprechen: Cross-Join wird auch als kartesisches Produkt bezeichnet. Es bedeutet, alle Datensätze in einer Tabelle direkt mit allen Datensätzen in einer anderen Tabelle zu kombinieren, ohne welche zu verwenden Bedingungen nacheinander abgleichen.

Inner Join ist ein Cross-Join mit nur Bedingungen, bei dem Datensätze herausgefiltert werden, die die darauf basierenden Bedingungen erfüllen Wenn eine bestimmte Bedingung vorliegt, werden Datensätze, die die Bedingungen nicht erfüllen, nicht in der Ergebnismenge angezeigt. Das heißt, der innere Join verbindet nur übereinstimmende Zeilen.
Äußerer Join Die Ergebnismenge enthält nicht nur Zeilen, die die Join-Bedingungen erfüllen, sondern auch Alle Datenzeilen von
in der linken Tabelle, der rechten Tabelle oder beiden Tabellen. Diese drei Fälle werden als linker äußerer Join, rechter äußerer Join und vollständiger äußerer Join bezeichnet .

Left Outer Join, auch Left Join genannt, die linke Tabelle ist die Haupttabelle, alle Datensätze in der linken Tabelle werden in der Ergebnismenge angezeigt In der rechten Tabelle gibt es keinen passenden Datensatz, er muss noch angezeigt werden und die entsprechenden Feldwerte auf der rechten Seite werden mit NULL gefüllt. Rechter äußerer Join, auch rechter Join genannt. Die rechte Tabelle ist die Haupttabelle und alle Datensätze in der rechten Tabelle werden im Ergebnissatz angezeigt. Left-Joins und Right-Joins sind austauschbar und MySQL unterstützt derzeit keine vollständigen Outer-Joins.

28. Notieren Sie sich die Namen von mehr als drei MySQL-Datenbankspeicher-Engines (Tipp: Groß- und Kleinschreibung beachten)

MyISAM, InnoDB, BDB (BerkeleyDB), Merge, Memory (Heap), Beispiel, Federated,
Archive, CSV, Blackhole, MaxDB und mehr als ein Dutzend Engines

33. Übersicht über den Transaktions-Rollback-Mechanismus in Myql

Eine Transaktion ist eine benutzerdefinierte Datenbankoperation In der Reihenfolge werden diese Vorgänge entweder ausgeführt oder gar nicht ausgeführt und stellen eine unteilbare Arbeitseinheit dar. Beim Transaktions-Rollback werden die durch die Transaktion abgeschlossenen Aktualisierungsvorgänge an der Datenbank rückgängig gemacht.

Wenn Sie zwei verschiedene Tabellen in der Datenbank gleichzeitig ändern möchten und es sich nicht um eine Transaktion handelt, wird beim Ändern der ersten Tabelle die zweite Tabelle geändert Während des Vorgangs ist möglicherweise eine Ausnahme aufgetreten und die Änderung konnte nicht vorgenommen werden. Zu diesem Zeitpunkt befindet sich nur die zweite Tabelle noch in ihrem unveränderten Zustand, während die erste Tabelle geändert wurde. Und wenn Sie sie als Transaktion festlegen und die erste Tabelle geändert wird und die zweite Tabelle abnormal geändert wird und nicht geändert werden kann, kehren die erste Tabelle und die zweite Tabelle in den unveränderten Zustand zurück. Dies ist der sogenannte Transaktions-Rollback

2. Welche Teile umfasst die SQL-Sprache? Was sind die Aktionsschlüsselwörter für jeden Abschnitt?

Antwort: Die SQL-Sprache besteht aus vier Teilen: Datendefinition (DDL), Datenmanipulation (DML), Datenkontrolle (DCL) und Datenabfrage (DQL).

Datendefinition: Tabelle erstellen, Tabelle ändern, Tabelle löschen, Index erstellen/löschen usw.

Datenmanipulation: Auswählen, Einfügen, Aktualisieren, Löschen,

Datenkontrolle: Gewähren, Widerrufen

Datenabfrage: auswählen

3. Was beinhalten Integritätsbeschränkungen?

Antwort: Datenintegrität (Datenintegrität) bezieht sich auf die Genauigkeit und Zuverlässigkeit von Daten.

ist in die folgenden vier Kategorien unterteilt:

1) Entitätsintegrität: legt fest, dass jede Zeile der Tabelle ist in der Tabelle die einzige Entität.

2) Domänenintegrität: Dies bedeutet, dass die Spalten in der Tabelle bestimmte Datentypbeschränkungen erfüllen müssen, darunter Wertebereich, Genauigkeit und andere Vorschriften.

3) Referenzielle Integrität: Dies bedeutet, dass die Daten des Primärschlüssels und des Fremdschlüssels der beiden Tabellen konsistent sein sollten, um die Konsistenz der Daten zwischen den Tabellen sicherzustellen und Datenbeschädigungen zu verhindern . Fehlende oder bedeutungslose Daten häufen sich in der Datenbank.

4) Benutzerdefinierte Integrität: Verschiedene relationale Datenbanksysteme erfordern aufgrund ihrer Anwendungsumgebung häufig einige besondere Einschränkungen. Benutzerdefinierte Integrität ist eine Einschränkung für eine bestimmte relationale Datenbank, die die semantischen Anforderungen widerspiegelt, die eine bestimmte Anwendung erfüllen muss.

Einschränkungen im Zusammenhang mit Tabellen: einschließlich Spalteneinschränkungen (NOT NULL (Nicht-Null-Einschränkung)) und Tabelle Einschränkungen (PRIMÄRSCHLÜSSEL, Fremdschlüssel, Prüfung, EINZIGARTIG).

4. Was ist eine Transaktion? und seine Eigenschaften?

Antwort: Transaktion: Es handelt sich um eine Reihe von Datenbankoperationen und die grundlegende logische Einheit von Datenbankanwendungen.

Transaktionsmerkmale:

(1) Atomizität: das heißt, nicht möglich Teilbarkeit, entweder werden alle Transaktionen ausgeführt oder keine.

(2) Konsistenz oder Stringability. Die Ausführung einer Transaktion wandelt die Datenbank von einem korrekten Zustand in einen anderen korrekten Zustand um

(3) Isolation. Bevor die Transaktion korrekt festgeschrieben wird, dürfen Änderungen an den Daten durch die Transaktion keiner anderen Transaktion zur Verfügung gestellt werden,

(4) Persistenz. Nachdem eine Transaktion korrekt übermittelt wurde, werden ihre Ergebnisse dauerhaft in der Datenbank gespeichert. Auch wenn nach der Übermittlung der Transaktion weitere Fehler auftreten, werden die Verarbeitungsergebnisse der Transaktion gespeichert.

Oder verstehen Sie es so:

Transaktionen sind als logische Arbeitseinheit miteinander verbunden SQL-Anweisungsgruppierung: Wenn eine Anweisungsoperation fehlschlägt, schlägt die gesamte Operation fehl und zukünftige Operationen werden auf den Zustand vor der Operation zurückgesetzt, oder es wird ein Knoten darauf vorhanden sein. Um sicherzustellen, dass etwas entweder ausgeführt oder nicht ausgeführt wird, können Transaktionen verwendet werden. Um eine gruppierte Anweisung als Transaktion zu betrachten, muss sie die ACID--Tests bestehen, nämlich Atomizität, Konsistenz, Isolation und Haltbarkeit.

5. Was ist ein Schloss?

Antwort: Die Datenbank ist eine gemeinsame Ressource, die von mehreren Benutzern verwendet wird. Wenn mehrere Benutzer gleichzeitig auf Daten zugreifen, greifen mehrere Transaktionen gleichzeitig auf dieselben Daten in der Datenbank zu. Wenn gleichzeitige Vorgänge nicht kontrolliert werden, können falsche Daten gelesen und gespeichert werden, wodurch die Konsistenz der Datenbank zerstört wird.

Sperren ist eine sehr wichtige Technologie, um die Parallelitätskontrolle von Datenbanken zu erreichen. Bevor eine Transaktion ein Datenobjekt bearbeitet, sendet sie zunächst eine Anfrage an das System, um es zu sperren. Nach der Sperrung hat die Transaktion eine gewisse Kontrolle über das Datenobjekt. Bevor die Transaktion die Sperre aufhebt, können andere Transaktionen das Datenobjekt nicht aktualisieren.

Grundlegende Sperrtypen: Zu den Sperren gehören Sperren auf Zeilenebene und Sperren auf Tabellenebene

6. Was ist Ansicht? Was ist ein Cursor?

Antwort: Eine Ansicht ist eine virtuelle Tabelle, die die gleichen Funktionen wie eine physische Tabelle hat. Ansichten können hinzugefügt, geändert, überprüft und bearbeitet werden. Eine Ansicht ist normalerweise eine Teilmenge von Zeilen oder Spalten einer oder mehrerer Tabellen. Änderungen an der Ansicht haben keine Auswirkungen auf die zugrunde liegenden Tabellen. Im Vergleich zu Abfragen mit mehreren Tabellen ist es für uns einfacher, Daten zu erhalten.

Cursor: Er verarbeitet die Abfrageergebnismenge effektiv als Einheit. Der Cursor kann auf einer bestimmten Zeile in der Zelle positioniert werden, um eine oder mehrere Zeilen aus der aktuellen Zeile im Ergebnissatz abzurufen. Sie können Änderungen an der aktuellen Zeile des Ergebnissatzes vornehmen. Cursor werden im Allgemeinen nicht verwendet, aber wenn Daten einzeln verarbeitet werden müssen, sind Cursor sehr wichtig.

7. Was ist eine gespeicherte Prozedur? Wie soll ich anrufen?

Antwort: Die gespeicherte Prozedur ist eine vorkompilierte SQL-Anweisung. Der Vorteil besteht darin, dass sie einen modularen Aufbau ermöglicht, was bedeutet, dass sie nur einmal erstellt werden muss Wird später im Programm verwendet. Sie können es mehrmals aufrufen. Wenn für einen bestimmten Vorgang mehrere SQL-Ausführungen erforderlich sind, ist die Verwendung gespeicherter Prozeduren schneller als die Ausführung einfacher SQL-Anweisungen. Gespeicherte Prozeduren können über ein Befehlsobjekt aufgerufen werden.

8. Welche Rolle spielt der Index? Und welche Vor- und Nachteile hat es?

Antwort: Ein Index ist eine spezielle Abfragetabelle, die die Datenbanksuchmaschine verwenden kann, um den Datenabruf zu beschleunigen. Es ist dem Inhaltsverzeichnis eines Buches im wirklichen Leben sehr ähnlich. Sie können die gewünschten Daten finden, ohne das gesamte Buch abzufragen. Indizes können eindeutig sein. Durch das Erstellen eines Index können Sie eine einzelne Spalte oder mehrere Spalten angeben. Der Nachteil besteht darin, dass die Dateneingabe verlangsamt und die Datenbank vergrößert wird.

9. Wie kann man die drei Paradigmen auf populäre Weise verstehen?

Antwort: Erste Normalform: 1NF ist eine atomare Einschränkung für Attribute, die erfordert, dass Attribute atomar und nicht zerlegbar sind;

Zweite Normalform: 2NF ist eine eindeutige Einschränkung für Datensätze, die erfordert, dass Datensätze eindeutige Identifikatoren haben, d. h. die Einzigartigkeit von Entitäten; 🎜 >Dritte Normalform: 3NF ist eine Einschränkung der Feldredundanz, das heißt, kein Feld kann von anderen Feldern abgeleitet werden. Es erfordert, dass Felder nicht redundant sind. .

Vor- und Nachteile des paradigmatischen Designs:

Vorteile:

Kann die Datenredundanz so weit wie möglich reduzieren und Aktualisierungen schnell und klein machen

Nachteile: Es ist erforderlich Viele Abfragen Die Zuordnung zwischen Tabellen verringert die Schreibeffizienz und erhöht die Leseeffizienz, wodurch die Indexoptimierung schwieriger wird

Denormalisierung:

Vorteile: Es kann Tabellenzuordnungen reduzieren und eine bessere Indexoptimierung ermöglichen

Nachteile: Datenredundanz und Datenanomalien, Daten Die Änderung erfordert mehr Kosten

10.Was ist eine Basistabelle? Was ist eine Ansicht?

Antwort: Die Basistabelle ist eine unabhängige Tabelle für sich. In SQL eine Beziehung ist Entspricht einer Tabelle. Eine Ansicht ist eine Tabelle, die aus einer oder mehreren Basistabellen abgeleitet ist. Die Ansicht selbst wird nicht unabhängig in der Datenbank gespeichert, sondern ist eine virtuelle Tabelle

11. Beschreiben Sie die Vorteile von Ansichten?

Antwort: (1) Ansichten können Benutzervorgänge vereinfachen. (2) Ansichten ermöglichen es Benutzern, dieselben Daten aus mehreren Blickwinkeln anzuzeigen. (3) Ansichten sind Datenbanken ein gewisses Maß an logischer Unabhängigkeit; (4) Ansichten können Sicherheitsschutz für vertrauliche Daten bieten.

12. Was bedeutet NULL?

Antwort: Der Wert NULL steht für UNBEKANNT: Er steht nicht für „ " (leerer String). Jeder Vergleich mit einem NULL-Wert führt zu einem NULL-Wert. Sie können keinen Wert mit einem NULL-Wert vergleichen und logischerweise erwarten, eine Antwort zu erhalten.

Verwenden Sie IS NULL für die NULL-Beurteilung

13. Was ist der Unterschied zwischen Primärschlüssel, Fremdschlüssel und Index? ?

Der Unterschied zwischen Primärschlüssel, Fremdschlüssel und Index

Definition:

Primärschlüssel – identifiziert einen Datensatz eindeutig, kann nicht dupliziert werden und darf nicht leer sein

Fremdschlüssel – der Fremdschlüssel einer Tabelle gehört zu einer anderen Tabelle. Primärschlüssel und Fremdschlüssel können Duplikate haben und Nullwerte sein

Index – dieses Feld hat keine Duplikatwerte, kann aber einen Nullwert haben

Funktion:

Primärschlüssel – zur Gewährleistung der Datenintegrität

Fremdschlüssel – zum Herstellen von Verbindungen mit anderen Tabellen

Indizes – zur Verbesserung der Abfrage Sortiergeschwindigkeit

Nummer:

Primärschlüssel – es kann nur einen Primärschlüssel geben

Fremdschlüssel - -Eine Tabelle kann mehrere Fremdschlüssel haben

Indizes -Eine Tabelle kann mehrere eindeutige Indizes haben

14. Womit können Sie sicherstellen, dass die Felder in der Tabelle nur Werte in einem bestimmten Bereich akzeptieren?

Antwort: Einschränkung prüfen Es wird in einer Datenbanktabelle definiert, um den in dieser Spalte eingegebenen Wert zu begrenzen.

Trigger können auch verwendet werden, um die Werte zu begrenzen, die Felder in Datenbanktabellen akzeptieren können. Für diese Methode müssen jedoch Trigger in der Tabelle definiert werden, was sich möglicherweise auf die Leistung auswirkt in manchen Fällen.

15. Welche Methoden gibt es zur Optimierung von SQL-Anweisungen? (Wählen Sie einige aus)

(1) In der Where-Klausel: Die Verbindung zwischen Where-Tabellen muss vor anderen Where-Bedingungen geschrieben werden, diese können die größten herausfiltern Die Bedingungen für Mengendatensätze müssen am Ende der Where-Klausel geschrieben werden.

(2) Ersetzen Sie IN durch EXISTS und NOT IN durch NOT EXISTS.

(3) Vermeiden Sie die Verwendung von Berechnungen für indizierte Spalten

(4) Vermeiden Sie die Verwendung IS NULL und IS NOT NULL

(5) in der Indexspalte, um die Abfrage zu optimieren. Sie sollten zunächst überlegen, wo und Erstellen Sie einen Index für die beteiligten Spalten in der Reihenfolge.

(6) Sie sollten versuchen, eine Nullwertbeurteilung von Feldern in der where-Klausel zu vermeiden, da die Engine sonst die Verwendung des Index aufgibt und eine vollständige Tabelle erstellt scan

(7) Sie sollten versuchen, Ausdrucksoperationen für Felder in der where-Klausel zu vermeiden, da dies dazu führen würde, dass die Engine die Verwendung des Index aufgibt und a ausführt Vollständiger Tabellenscan

16. Was ist der Unterschied zwischen „korrelierter Unterabfrage“ und „nicht korrelierter Unterabfrage“ in der SQL-Anweisung?

Antwort: Unterabfrage: Eine in anderen Abfragen verschachtelte Abfrage wird als Abfrage bezeichnet.

Die Unterabfrage wird auch als innere Abfrage bezeichnet, und die Anweisung, die die Unterabfrage enthält, wird als äußere Abfrage (auch als Hauptabfrage bezeichnet) bezeichnet.

Alle Unterabfragen können in zwei Kategorien unterteilt werden, nämlich korrelierte Unterabfragen und nicht korrelierte Unterabfragen

(1) Eine nicht korrelierte Unterabfrage ist eine von der äußeren Abfrage unabhängige Unterabfrage. Die Unterabfrage wird insgesamt einmal ausgeführt und der Wert wird nach der Ausführung an die äußere Abfrage übergeben.

(2) Die Ausführung der relevanten Unterabfrage hängt von den Daten der externen Abfrage ab. Wenn die externe Abfrage eine Zeile ausführt, wird die Unterabfrage einmal ausgeführt.

Daher sind nicht korrelierte Unterabfragen effizienter als korrelierte Unterabfragen

17. char Was ist der Unterschied zwischen Varchar und Varchar?

Antwort: Es ist ein Typ mit fester Länge und varchar ist ein Typ mit variabler Länge. Der Unterschied zwischen ihnen ist:

In einer Datenspalte vom Typ char(M) belegt jeder Wert M Bytes. Wenn eine Länge kleiner als M ist, füllt MySQL sie rechts mit Leerzeichen auf. (Auffüllzeichen werden während des Suchvorgangs entfernt.) In einer Datenspalte vom Typ varchar(M) nimmt jeder Wert gerade genug Bytes plus ein Byte ein, um seine Länge aufzuzeichnen ( Das heißt, die Gesamtlänge beträgt L+1 Bytes ).

varchar ist auf folgende Szenarien anwendbar:

Die maximale Länge der String-Liste ist viel größer als die durchschnittliche Länge 2. Zeichenfolge wird selten aktualisiert, neigt zur Speicherfragmentierung. 3. Verwenden Sie Multibyte-Zeichensätze zum Speichern von Zeichenfolgen.

Char-Szenario:

speichert Zeichenfolgen mit ungefährer Länge (md5-Wert, Personalausweis, Mobiltelefonnummer) und relativ kurzer Länge (da Varchar zusätzlichen Platz benötigt, um die Länge der Zeichenfolge aufzuzeichnen), was besser geeignet ist Bei häufigen Aktualisierungen gibt es beim Aktualisieren keine Seitenaufteilung, um Speicherfragmentierung zu vermeiden und eine bessere Io-Leistung zu erzielen

18. MySQL-Speicher-Engine, der Unterschied zwischen Myisam und Innodb.

Antwort: Einfacher Ausdruck:

MyISAM ist eine nicht-transaktionale Speicher-Engine, die für Anwendungen mit häufigen Abfragen geeignet ist ; Tabellensperre, kein Deadlock; geeignet für kleine Daten, kleine Parallelität; innodb ist eine Speicher-Engine, die bei richtiger Gestaltung für Anwendungen mit vielen Einfügungs- und Aktualisierungsvorgängen geeignet ist Es handelt sich um eine Zeilensperre (der größte Unterschied liegt in der Ebene der Sperre); geeignet für

Big Data und große Parallelität. 19. Welche Datentabellentypen gibt es?

Antwort: MyISAM, InnoDB, HEAP, BOB, ARCHIVE, CSV, usw.

MyISAM: ausgereift, stabil, einfach zu verwalten, schnell zu lesen. Einige Funktionen (Transaktionen usw.) unterstützen keine Sperren auf Tabellenebene.

InnoDB: Unterstützt Transaktionen, Fremdschlüssel und andere Funktionen sowie das Sperren von Datenzeilen. Es nimmt viel Platz ein und unterstützt keine Volltextindizierung usw.

20. Die MySQL-Datenbank wird als Speicher des Veröffentlichungssystems verwendet. Der Zuwachs von mehr als 50.000 Elementen pro Tag wird voraussichtlich drei Jahre dauern.

a. Entwerfen Sie eine gut gestaltete Datenbankstruktur, ermöglichen Sie teilweise Datenredundanz und versuchen Sie, Join-Abfragen zu vermeiden, um die Effizienz zu verbessern.

b. Wählen Sie den entsprechenden Tabellenfelddatentyp und die Speicher-Engine aus und fügen Sie die Indizes entsprechend hinzu.

c. Master-Slave-Lese- und Schreibtrennung der MySQL-Bibliothek.

d. Suchen Sie nach regulären Tabellen, um die Datenmenge in einer einzelnen Tabelle zu reduzieren und die Abfragegeschwindigkeit zu verbessern.

e. Fügen Sie Caching-Mechanismen wie Memcached, APC usw. hinzu.

f. Generieren Sie statische Seiten für Seiten, die sich nicht häufig ändern.

g. Schreiben Sie effizientes SQL. Beispielsweise wird SELECT * FROM TABEL in SELECT field_1, field_2, field_3 FROM TABLE geändert.

21 Welche Methode verwenden Sie für Websites mit hohem Datenverkehr, um das Problem der Statistik zu lösen? der Seitenbesuche?

Antwort: a. Bestätigen Sie, ob der Server den aktuellen Datenverkehr unterstützen kann.

b. Optimieren Sie den Datenbankzugriff.

c. Verbieten Sie den externen Zugriff auf Links (Hotlinking), wie z. B. das Hotlinking von Bildern.

d. Datei-Downloads kontrollieren.

e. Verwenden Sie verschiedene Hosts, um den Datenverkehr zu verteilen.

f. Verwenden Sie eine Browsing-Statistiksoftware, um die Anzahl der Besuche zu ermitteln und eine gezielte Optimierung durchzuführen.

4. Wie optimiert man SQL? (Die Schüler können die folgenden Erklärungen verstehen und die allgemeine Bedeutung basierend auf ihrem eigenen Verständnis ausdrücken)

Antwort:

(1) Wählen Sie die richtige Speicher-Engine

Nehmen Sie MySQL als Beispiel, einschließlich der beiden Speicher-Engines MyISAM und InnoDB. Jede Engine hat Vorteile und Nachteile.

MyISAM eignet sich für Anwendungen, die eine große Anzahl von Abfragen erfordern, ist jedoch nicht sehr gut für eine große Anzahl von Schreibvorgängen. Selbst wenn Sie nur ein Feld aktualisieren müssen, wird die gesamte Tabelle gesperrt und andere Prozesse, auch der Lesevorgang, können nicht ausgeführt werden, bis der Lesevorgang abgeschlossen ist. Darüber hinaus ist MyISAM bei Berechnungen wie SELECT COUNT(*) extrem schnell.

Der Trend von InnoDB wird eine sehr komplexe Speicher-Engine sein, und für einige kleine Anwendungen wird sie langsamer sein als MyISAM. Es unterstützt jedoch die „Zeilensperre“ und ist daher besser, wenn viele Schreibvorgänge ausgeführt werden. Darüber hinaus werden auch fortgeschrittenere Anwendungen wie Transaktionen unterstützt.

(2) Optimieren Sie den Datentyp des Feldes

Bedenken Sie ein Prinzip: Je kleiner das Feld Spalte wird schneller sein. Wenn eine Tabelle nur wenige Spalten hat (z. B. Wörterbuchtabelle, Konfigurationstabelle), gibt es keinen Grund, INT als Primärschlüssel zu verwenden. Es ist wirtschaftlicher, MEDIUMINT, SMALLINT oder kleiner TINYINT zu verwenden. Wenn Sie die Zeit nicht im Auge behalten müssen, ist es viel besser, DATE als DATETIME zu verwenden. Natürlich müssen Sie auch genügend Raum für Erweiterungen lassen.

(3) Fügen Sie dem Suchfeld einen Index hinzu

Der Index bedeutet nicht unbedingt das Primärschlüssel oder das Unique-Feld. Wenn es in Ihrer Tabelle ein Feld gibt, das Sie immer für die Suche verwenden, ist es am besten, es zu indizieren, es sei denn, das Feld, das Sie durchsuchen möchten, ist ein großes Textfeld, dann sollten Sie einen Volltextindex erstellen.

(4) Vermeiden Sie die Verwendung von Select *. Je mehr Daten aus der Datenbank gelesen werden, desto langsamer wird die Abfrage. Wenn Ihr Datenbankserver und Ihr WEB-Server außerdem zwei unabhängige Server sind, erhöht dies auch die Belastung der Netzwerkübertragung. Auch wenn Sie alle Felder in der Datentabelle abfragen möchten, vermeiden Sie die Verwendung des Platzhalterzeichens *. Eine sinnvolle Verwendung der integrierten Feldausschlussdefinitionen kann hilfreicher sein.

(5) Verwenden Sie ENUM anstelle von VARCHAR

Der ENUM-Typ ist sehr schnell und kompakt. Tatsächlich enthält es einen TINYINT, erscheint jedoch als Zeichenfolge. Auf diese Weise ist es ideal, dieses Feld zum Erstellen einiger Auswahllisten zu verwenden. Wenn beispielsweise die Werte von Feldern wie Geschlecht, ethnische Zugehörigkeit, Abteilung und Status begrenzt und fest sind, sollten Sie ENUM anstelle von VARCHAR verwenden.

(6) Verwenden Sie NOT NULL so oft wie möglich

Es sei denn, Sie haben einen ganz besonderen Grund, NULL zu verwenden Wenn Sie einen Wert angeben, sollten Sie dafür sorgen, dass Ihre Felder immer NICHT NULL sind. NULL benötigt tatsächlich zusätzlichen Speicherplatz und Ihr Programm wird komplexer, wenn Sie Vergleiche durchführen. Dies bedeutet natürlich nicht, dass Sie nicht NULL verwenden können. Die Realität ist sehr kompliziert und es wird immer noch Situationen geben, in denen Sie NULL-Werte verwenden müssen.

(7) Tabelle mit fester Länge ist schneller

wenn alle Felder in der Tabelle „feste Länge“ haben , wird die gesamte Tabelle als „statisch“ oder „feste Länge“ betrachtet. Beispielsweise enthält die Tabelle keine Felder der folgenden Typen: VARCHAR, TEXT, BLOB. Solange Sie eines dieser Felder einschließen, ist die Tabelle keine „statische Tabelle fester Länge“ mehr und die MySQL-Engine verarbeitet sie auf andere Weise.

Tabellen mit fester Länge verbessern die Leistung, weil MySQL schneller sucht, da diese festen Längen es einfacher machen, den Offset der nächsten Daten zu berechnen. Es ist quantitativ, also lesbar wird natürlich schnell sein. Und wenn das Feld keine feste Länge hat, muss das Programm jedes Mal, wenn Sie das nächste finden möchten, den Primärschlüssel finden.

Außerdem lassen sich Tabellen mit fester Länge einfacher zwischenspeichern und neu erstellen. Der einzige Nebeneffekt besteht jedoch darin, dass Felder mit fester Länge etwas Platz verschwenden, da Felder mit fester Länge unabhängig davon, ob Sie sie verwenden oder nicht, so viel Platz beanspruchen.


22, ist in der Tabelle Wählen Sie den entsprechenden Datentyp für das Feld aus (physisches Design)

Feldtyppriorität: Ganzzahl>Datum,Uhrzeit>enum,char>varchar>blob,text

Geben Sie numerischen Typen Priorität, gefolgt von Datums- oder Binärtypen und schließlich Zeichenfolgentypen. Bei Datentypen derselben Ebene sollte den Daten Priorität eingeräumt werden das nimmt weniger Platz ein. Typ

23: Speicherdauer

Dzur Zeit: JJJJ-MM -DD ​​HH:MM :SS-Format speichert die Periodenzeit sekundengenau, belegt 8 Byte Speicherplatz, der Datenzeittyp hat nichts mit der Zeitzone zu tun

Timestamp: im Zeitstempelformat, belegt 4 Bytes, reicht von 1970-1-1 bis 2038-1-19. Standardmäßig kann der Wert der Zeitstempelspalte automatisch geändert werden Daten in der ersten Spaltenzeile werden geändert

Date: (Geburtstag) benötigt weniger Bytes als die Verwendung von string.datatime.int zum Speichern von Datum und Monat, was in Ordnung ist die Datums- und Uhrzeitfunktion zur Berechnung des Datumszeitraums

ZeitZeit: Speichern Sie die Zeitteildaten

Hinweis : Verwenden Sie keinen String-Typ zum Speichern von Datums- und Uhrzeitdaten (beansprucht normalerweise weniger Speicherplatz als Strings, Sie können Datumsfunktionen beim Durchführen von Suchen und Filtern verwenden)

Die Verwendung von int zum Speichern von Datum und Uhrzeit ist nicht so gut wie die Verwendung des Zeitstempeltyps.

Verwandte Empfehlungen:

Einige MySQL-Interviewfragen

Das obige ist der detaillierte Inhalt vonMYSQL-Interviewfragen (1). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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