Heim >Betrieb und Instandhaltung >Sicherheit >Was sind die gängigen Techniken für MySQL-Datenbanken?

Was sind die gängigen Techniken für MySQL-Datenbanken?

WBOY
WBOYnach vorne
2023-05-18 13:29:00974Durchsuche

1. Wie wähle ich den Servertyp aus?

Die Bedeutung jedes Parameters im MySQL-Server-Konfigurationsfenster ist wie folgt.

Mit dieser Option wird der Konfigurationstyp des Servers angegeben. Klicken Sie auf die Schaltfläche „Abwärts“ rechts neben dieser Option, um drei Optionen anzuzeigen.

Die spezifischen Bedeutungen der drei Optionen sind wie folgt:

Diese Option stellt eine typische persönliche Desktop-Workstation für die Entwicklung dar. Gehen Sie davon aus, dass auf dem Computer mehrere Desktopanwendungen ausgeführt werden. Konfigurieren Sie den MySQL-Server so, dass er nur minimale Systemressourcen verwendet.

Server-Maschine (Server): Diese Option stellt den Server dar, der MySQL-Server zusammen mit anderen Anwendungen wie FTP-, E-Mail- und Webservern ausführen kann. Der MySQL-Server ist so konfiguriert, dass er einen angemessenen Anteil der Systemressourcen nutzt.

DedicatedMySQL Server Machine (dedizierter MySQL-Server): Diese Option stellt einen Server dar, der nur den MySQL-Dienst ausführt. Es wird davon ausgegangen, dass keine anderen Anwendungen ausgeführt werden. Der MySQL-Server ist so konfiguriert, dass er alle verfügbaren Systemressourcen nutzt. Als Anfänger empfiehlt es sich, die Option [Entwicklungsmaschine] zu wählen, die weniger Systemressourcen beansprucht.

2. Wie verwende ich Sonderzeichen in MySQL?

Symbole wie einfache Anführungszeichen ('), doppelte Anführungszeichen ("), Backslash () usw. Diese Symbole können nicht direkt in MySQL eingegeben und verwendet werden, da sie sonst zu unerwarteten Ergebnissen führen. In MySQL sind diese Sonderzeichen aufgerufen Um Zeichen zu maskieren, muss die Eingabe mit einem Backslash-Symbol ('') beginnen. Wenn Sie also einfache und doppelte Anführungszeichen verwenden, sollten Sie (') bzw. (") eingeben, und wenn Sie einen Backslash eingeben, sollten Sie ( ), Zu den weiteren Sonderzeichen gehören Wagenrücklauf (), Zeilenvorschub (), Tabulator (ab), Rücktaste () usw. Beim Einfügen dieser Sonderzeichen in die Datenbank müssen diese maskiert werden.

3. Wie führt MySQL einen Zeichenfolgenvergleich unter Berücksichtigung der Groß- und Kleinschreibung durch?

MySQL unterscheidet unter der Windows-Plattform nicht zwischen Groß- und Kleinschreibung, daher ist auch bei der String-Vergleichsfunktion die Groß-/Kleinschreibung nicht beachtet. Um einen Vergleich unter Berücksichtigung der Groß- und Kleinschreibung durchzuführen, verwenden Sie das Schlüsselwort BINARY vor der Zeichenfolge. Beispielsweise ist das Rückgabeergebnis von „a“=„A“ standardmäßig 1. Wenn das Schlüsselwort BINARY verwendet wird, ist das Ergebnis von „BINARY'a“=„A“ 0. Bei Berücksichtigung der Groß-/Kleinschreibung ist „a“ und 'A' Nicht dasselbe.

Fähigkeiten zur MySQL-Anweisungsoptimierung

Die Optimierung der MySQL-Datenbankleistung ist auch ein Beweis für den Fortschritt der MySQL-Datenbank :

1. Sie sollten versuchen, 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.

Um Abfragen zu optimieren, sollten vollständige Tabellenscans so weit wie möglich vermieden werden. Dann sollten wir der Erstellung von Indizes für die Spalten Priorität einräumen, die an „Where“ und „Ordnung nach“ beteiligt sind.

3. 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, wie zum Beispiel:

select id from t where num is null

kann auf num eingestellt werden. Stellen Sie sicher, dass in der Spalte num der Tabelle kein Nullwert vorhanden ist, und fragen Sie dann wie folgt ab:

select id from t where num=0

4 Versuchen Sie, die Verwendung von or zu vermeiden in der where-Klausel, um Bedingungen zu verbinden, sonst gibt die Engine auf. Verwenden Sie einen Index, um einen vollständigen Tabellenscan durchzuführen, wie zum Beispiel:

select id from t where num=10 or num=20

Sie können wie folgt abfragen:

select id from t where num=10

union all

select id from t where num=20

5. Die folgende Abfrage führt auch zu einem vollständigen Tabellenscan: (kann nicht vor dem Prozentzeichen stehen)

select id from t where name like '�c%'

Um die Effizienz zu verbessern, können Sie den Volltext abrufen.

6. In und nicht in sollten ebenfalls mit Vorsicht verwendet werden, da es sonst zu einem vollständigen Tabellenscan führt, wie zum Beispiel:

select id from t where num in (1,2,3)

Für kontinuierliche Werte, Verwenden Sie nicht between, wenn möglich. Verwendet:

select id from t where num between 1 and 3

7 Wenn Parameter in der where-Klausel verwendet werden, führt dies auch zu einem vollständigen Tabellenscan. Da SQL lokale Variablen nur zur Laufzeit auflöst, kann der Optimierer die Auswahl eines Zugriffsplans nicht bis zur Laufzeit verschieben, sondern muss die Auswahl zur Kompilierungszeit treffen. Wenn der Zugriffsplan zur Kompilierungszeit erstellt wird und der Wert einer Variablen unbekannt ist, kann dieser Wert nicht als Eingabe für die Indexauswahl verwendet werden. Die folgende Anweisung führt beispielsweise einen vollständigen Tabellenscan durch:

select id from t where num=@num

kann geändert werden, um die Abfrage zur Verwendung eines Index zu zwingen:

select id from t with(index(index name )) where num=@num

8 Vermeiden Sie die Ausführung von Ausdrucksoperationen für Felder in der where-Klausel, da dies dazu führen würde, dass die Engine die Verwendung des Index aufgibt und einen vollständigen Tabellenscan durchführt. Zum Beispiel:

select id from t where num/2=100

sollte geändert werden in:

select id from t where num=100*2

9 Sie sollten versuchen, funktionale Operationen an Feldern in zu vermeiden where-Klausel führt dazu, dass die Engine die Verwendung des Index abbricht und einen vollständigen Tabellenscan durchführt. Zum Beispiel:

Wählen Sie die ID aus t aus, wobei substring(name,1,3)='abc'--id, deren Name mit abc beginnt

Wählen Sie die ID aus t aus, wobei datediff(day,createdate,'2005-11-30′) )= Die generierte ID 0–'2005-11-30′ sollte geändert werden in:

Wählen Sie eine ID aus t aus, wobei der Name etwa „abc%“ lautet.

Wählen Sie eine ID aus t aus, wobei erstelltes Datum>='2005-11-30′ und ist Erstellungsdatum<'2005-12-1′

10. Führen Sie keine Funktionen, arithmetischen Operationen oder andere Ausdrucksoperationen auf der linken Seite von „=" in der where-Klausel aus, da das System sonst möglicherweise nicht in der Lage ist, den Index korrekt zu verwenden.

11. Wenn Sie ein Indexfeld als Bedingung verwenden und der Index ein zusammengesetzter Index ist, muss das erste Feld im Index als Bedingung verwendet werden, um sicherzustellen, dass das System den Index verwendet. Andernfalls wird der Index nicht verwendet . Und die Feldreihenfolge sollte so weit wie möglich mit der Indexreihenfolge übereinstimmen.

12. Schreiben Sie keine bedeutungslosen Abfragen:

select col1,col2 into #t from t where 1=0

Diese Art von Code gibt keine Ergebnismenge zurück , aber es wird Systemressourcen verbrauchen, sollte wie folgt geändert werden:

create table #t(...)

13 In vielen Fällen ist es eine gute Wahl, „exists“ anstelle von „in“ zu verwenden:

select num from a where num in (select num from b)

Ersetzen Sie durch die folgende Anweisung:

select num from a where exist (select 1 from b where num=a.num)

14. Nicht alle Indizes sind für SQL-Abfragen gültig Optimiert Abfragen basierend auf den Daten in der Tabelle. Ja, wenn eine große Menge doppelter Daten in der Indexspalte vorhanden ist, verwendet die SQL-Abfrage möglicherweise nicht den Index, wenn beispielsweise ein Feld „Geschlecht“ in einer Tabelle vorhanden ist Da die Hälfte männlich und die andere Hälfte weiblich ist, hat ein Index, der auf dem Geschlecht basiert, keinen Einfluss auf die Abfrageeffizienz.

15. Je mehr Indizes, desto besser. Obwohl der Index die Effizienz der entsprechenden Auswahl verbessern kann, verringert er auch die Effizienz des Einfügens und Aktualisierens, da der Index beim Einfügen oder Aktualisieren möglicherweise neu erstellt wird Wie der Index erstellt wird, wird von Fall zu Fall geprüft. Es ist am besten, nicht mehr als 6 Indizes für eine Tabelle zu haben. Wenn diese Zahl überschritten wird, müssen Sie überlegen, ob es notwendig ist, Indizes für einige selten verwendete Spalten zu erstellen.

16. Sie sollten die Aktualisierung von Clustered-Index-Datenspalten so weit wie möglich vermeiden, da die Reihenfolge der Clustered-Index-Datenspalten der physischen Speicherreihenfolge von Tabellendatensätzen entspricht. Sobald sich der Spaltenwert ändert, führt dies zu einer Anpassung der Reihenfolge die gesamten Tabellendatensätze, was viel Zeit kostet. Wenn das Anwendungssystem die Datenspalten des Clustered-Index häufig aktualisieren muss, müssen Sie überlegen, ob der Index als Clustered-Index erstellt werden soll.

17. Versuchen Sie, numerische Felder zu verwenden, versuchen Sie, sie nicht als Zeichenfelder zu gestalten. Dies verringert die Leistung von Abfragen und Verbindungen und erhöht den Speicheraufwand. Bei der Verarbeitung von Abfragen und Verknüpfungen vergleicht die Engine jedes Zeichen in der Zeichenfolge einzeln, sodass numerische Typen nur einmal und nicht einzeln verglichen werden müssen.

18. Verwenden Sie so oft wie möglich varchar/nvarchar anstelle von char/nchar, da Felder mit variabler Länge erstens wenig Speicherplatz haben und zweitens bei Abfragen die Sucheffizienz in einem relativ kleinen Feld verringern können offensichtlich höher.

19. Verwenden Sie „select * from t“ nirgendwo, ersetzen Sie „*“ durch eine bestimmte Feldliste und geben Sie keine nicht verwendeten Felder zurück.

20. Versuchen Sie, Tabellenvariablen anstelle von temporären Tabellen zu verwenden. Wenn die Tabellenvariable eine große Datenmenge enthält, beachten Sie, dass die Indizes sehr begrenzt sind (nur Primärschlüsselindizes).

21. Vermeiden Sie das häufige Erstellen und Löschen temporärer Tabellen, um den Verbrauch von Systemtabellenressourcen zu reduzieren.

22. Temporäre Tabellen sind nicht unbrauchbar, da sie bestimmte Routinen effizienter machen können, beispielsweise wenn Sie wiederholt auf einen bestimmten Datensatz in einer großen Tabelle oder einer häufig verwendeten Tabelle verweisen müssen. Für einmalige Ereignisse ist es jedoch besser, eine Exporttabelle zu verwenden.

23. Wenn beim Erstellen einer temporären Tabelle die auf einmal eingefügte Datenmenge groß ist, können Sie „Auswählen in“ anstelle von „Tabelle erstellen“ verwenden, um eine große Anzahl von Protokollen zu vermeiden und die Geschwindigkeit zu verbessern Nicht groß. Um die Ressourcen der Systemtabelle zu schonen, sollte die Tabelle zuerst erstellt und dann eingefügt werden.

24. Wenn temporäre Tabellen verwendet werden, müssen alle temporären Tabellen am Ende der gespeicherten Prozedur explizit gelöscht werden. Dadurch kann eine langfristige Sperrung der Systemtabellen vermieden werden.

25. Vermeiden Sie die Verwendung von Cursorn, da Cursor weniger effizient sind. Wenn die vom Cursor verarbeiteten Daten 10.000 Zeilen überschreiten, sollten Sie darüber nachdenken, sie neu zu schreiben.

26. Versuchen Sie, große Transaktionsvorgänge zu vermeiden und die Systemparallelität zu verbessern.

Das obige ist der detaillierte Inhalt vonWas sind die gängigen Techniken für MySQL-Datenbanken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen