9 Tipps zur MySQL-Datenbankoptimierung

9 Tipps zur MySQL-Datenbankoptimierung

1. Wählen Sie die am besten geeigneten Feldattribute

Mysql ist eine relationale Datenbank, die die Speicherung großer Datenmengen gut unterstützt. Im Allgemeinen gilt jedoch: Je kleiner die Tabelle in der Datenbank ist, desto schneller werden die Abfragen ausgeführt. Um eine bessere Leistung zu erzielen, können wir beim Erstellen einer Tabelle daher die Breite der Felder in der Tabelle so gering wie möglich halten.

Wenn Sie beispielsweise beim Definieren des Postleitzahlenfelds den Wert char(255), wird der Datenbank offensichtlich unnötiger Speicherplatz hinzugefügt. Sogar die Verwendung varchar ist überflüssig, da char(6) diese Aufgabe gut erfüllen kann. Ebenso sollten wir, wenn möglich, MEDIUMINT statt BIGINT verwenden, um ganzzahlige Felder zu definieren.

2. Versuchen Sie, das Feld auf NOT NULL zu setzen

Setzen Sie das Feld nach Möglichkeit auf NOT NULL , damit die Datenbank bei der Ausführung zukünftiger Abfragen keine NULL-Werte vergleichen muss.

Für einige Textfelder, wie etwa „Provinz“ oder „Geschlecht“, können wir sie als ENUM-Typ (Aufzählung) definieren. Denn in MySQL wird der ENUM-Typ wie numerische Daten behandelt und numerische Daten werden viel schneller verarbeitet als Textdaten. Auf diese Weise können wir die Leistung der Datenbank verbessern.

3. Verwenden Sie JOIN anstelle von Unterabfragen

MySQL unterstützt SQL-Unterabfragen ab Version 4.1. Mit dieser Technik können Sie mithilfe einer Select-Anweisung ein einzelnes Abfrageergebnis erstellen und dieses Ergebnis dann als Filterbedingung in einer anderen Abfrage verwenden.

Wenn wir beispielsweise Kunden löschen möchten, für die in der Tabelle mit den grundlegenden Kundeninformationen keine Bestellungen vorliegen, können wir mithilfe einer Unterabfrage zunächst die Kunden-IDs aller Kunden abrufen, die Bestellungen aus der Tabelle mit den Verkaufsinformationen aufgegeben haben, und das Ergebnis dann an die Hauptabfrage übergeben, wie in der folgenden Abbildung dargestellt:

Wenn Sie zum Abschließen dieser Aufgabe einen JOIN verwenden, ist die Geschwindigkeit viel höher. Insbesondere wenn in der Tabelle „salesinfo“ ein Index für CustomerID vorhanden ist, ist die Leistung besser. Die Abfrage lautet wie folgt:

Der Grund, warum JOIN effizienter ist, liegt darin, dass MySQL keine temporäre Tabelle im Speicher erstellen muss, um diese Abfrage abzuschließen, die logischerweise zwei Schritte erfordert.

Wenn Ihre Anwendung viele JOIN-Abfragen enthält, sollten Sie außerdem sicherstellen, dass die Felder in den beiden verknüpften Tabellen indiziert sind. Auf diese Weise startet MySQL einen Mechanismus, um die JOIN-SQL-Anweisung für Sie zu optimieren. Und die für JOIN verwendeten Felder sollten vom gleichen Typ sein.

Beispiel: Wenn Sie ein DECIMAL-Feld mit einem INT-Feld verknüpfen, kann MySQL deren Indizes nicht verwenden. Für diese STRING -Typen ist auch der gleiche Zeichensatz erforderlich. (Die Zeichensätze der beiden Tabellen müssen nicht identisch sein).

Ein innerer inner join wird auch als Equijoin bezeichnet, und left/right join ist ein äußerer Join.

WÄHLEN SIE A.id, A.name, B.id, B.name VON A LINKS MIT B AUF A.id=B.id;

WÄHLEN SIE A.id, A.name, B.id, B.name AUS A RECHTS JOIN AUF B A.id= B.id;

Wählen Sie A.id, A.name, B.id, B.name aus einem inneren Join auf A.id = B.id;

Es wurde in vielerlei Hinsicht bestätigt, dass inner join eine schnellere Leistung bietet, da inner join ein gleichwertiger Join ist und möglicherweise weniger Zeilen zurückgibt. Wir müssen jedoch bedenken, dass einige Anweisungen implizit Equijoins verwenden, wie etwa:

WÄHLEN SIE A.id, A.name, B.id, B.name AUS A, B, WO A.id = B.id;

Empfehlung: Verwenden Sie wenn möglich inner join .

有inner join , left join right join , Right Join und full join Join. Tatsächlich gibt es zwischen ihnen keinen großen Unterschied, nur die Abfrageergebnisse sind unterschiedlich.

Beispielsweise haben wir zwei Tabellen:

Orders ist über den Fremdschlüssel Id_P mit der Tabelle Persons verknüpft.

inner join Join: Wenn zwei Tabellen für eine Abfrage verknüpft werden, werden nur die Ergebnismengen beibehalten, die vollständig mit den beiden Tabellen übereinstimmen.

Wir verwenden inner join , um die beiden Tabellen abzufragen. Das SQL lautet wie folgt:

SELECT p.Nachname, p.Vorname, o.Bestellnummer
VON Personen p
INNER JOIN Aufträge von
ON p.Id_P=o.Id_P und 1=1 -- Verwenden Sie und , um mehrere Bedingungen zu verbinden ORDER BY p.LastName

Abfrageergebnissatz:

Wenn bei dieser Verbindungsmethode das Feld „Id_P“ in der Tabelle „Orders“ keine Entsprechung in der Tabelle „Persons“ findet, wird es nicht aufgelistet.

Hinweis: select * from a,b ist ein kartesisches Produkt. Wenn Tabelle A beispielsweise 5 Datensätze und Tabelle B 3 Datensätze hat, dann ist das Endergebnis 5*3=15 Datensätze.

Wenn wir jedoch zwei Tabellen verbinden: select * from a,b where a.id = b.id , ändert sich die Bedeutung und ist gleichbedeutend mit:

Wählen Sie * aus einem inneren Join b auf a.id = b.id. – Das heißt, innerer Join.

Diese Schreibmethode entspricht jedoch nicht dem Standard und funktioniert möglicherweise nur für bestimmte Datenbanken, z. B. sqlserver . Es wird empfohlen, nicht so zu schreiben. Am besten schreibt man es als Inner Join.

Der Unterschied zwischen der Inner-Join-Abfrage ( select * from a join b on a.id = b.id ) und der zugehörigen Abfrage (select * from a , b where a.id = b.id)

Beim Verbinden zweier Tabellen gibt left join alle Zeilen aus der linken Tabelle zurück, auch wenn in der rechten Tabelle keine übereinstimmenden Datensätze vorhanden sind.

Wir verwenden Left Join, um die beiden Tabellen abzufragen. Das SQL lautet wie folgt:

SELECT p.Nachname, p.Vorname, o.Bestellnummer
VON Personen p
LEFT JOIN Aufträge o
EIN p.Id_P=o.Id_P
ORDER BY p.Nachname

Die Abfrageergebnisse lauten wie folgt:

Sie können sehen, dass das Feld Id_P der Zeile mit LastName Bush in der linken Tabelle (Tabelle „ Persons “) keine Entsprechung in der rechten Tabelle (Tabelle „ Orders “) hat, das Abfrageergebnis die Zeile aber dennoch beibehält.

right join, Wenn zwei Tabellen verknüpft werden, werden alle Zeilen der rechten Tabelle zurückgegeben, auch wenn in der linken Tabelle keine übereinstimmenden Datensätze vorhanden sind.

Wir verwenden Right Join, um die beiden Tabellen abzufragen. Das SQL lautet wie folgt:

SELECT p.Nachname, p.Vorname, o.Bestellnummer
VON Personen p
RIGHT JOIN Aufträge o
EIN p.Id_P=o.Id_P
ORDER BY p.Nachname

Die Abfrageergebnisse lauten wie folgt:

Der Id_P-Feldwert des letzten Datensatzes in der Tabelle „Bestellungen“ beträgt 65. In der linken Tabelle gibt es keinen passenden Datensatz, dieser wird jedoch beibehalten.

full join : Wenn Sie eine Join-Abfrage für zwei Tabellen ausführen, werden alle nicht übereinstimmenden Zeilen in der linken und rechten Tabelle zurückgegeben.

Wir verwenden Full Join, um die beiden Tabellen abzufragen. Das SQL lautet wie folgt:

SELECT p.Nachname, p.Vorname, o.Bestellnummer
VON Personen p
FULL JOIN Aufträge o
EIN p.Id_P=o.Id_P
ORDER BY p.Nachname

Die Abfrageergebnisse lauten wie folgt:

Das Abfrageergebnis ist die Vereinigungsmenge von left join und right join .

4. Verwenden Sie UNION anstelle manuell erstellter temporärer Tabellen

MySQL unterstützt seit Version 4.0 Union-Abfragen, die zwei oder mehr select , die die Verwendung temporärer Tabellen erfordern, zu einer Abfrage kombinieren können. Wenn die Client-Abfragesitzung endet, wird die temporäre Tabelle automatisch gelöscht, um sicherzustellen, dass die Datenbank ordentlich und effizient ist. Wenn wir union zum Erstellen einer Abfrage verwenden, müssen wir Union nur als Schlüsselwort verwenden, um mehrere Select-Anweisungen zu verbinden. Dabei ist zu beachten, dass die Anzahl der Felder in allen select -Anweisungen gleich sein muss. Das folgende Beispiel zeigt eine Abfrage mit Union.

Wenn wir bestätigen können, dass es keine doppelten Ergebnissätze gibt oder uns doppelte Ergebnissätze egal sind, versuchen Sie, „union all“ statt „union“ zu verwenden. Der Hauptunterschied zwischen „union“ und „union all“ besteht darin, dass ersteres zwei oder mehr Ergebnissätze zusammenführen muss, bevor eindeutige Filtervorgänge ausgeführt werden können. Dies beinhaltet das Sortieren, das Hinzufügen vieler CPU-Vorgänge, was den Ressourcenverbrauch und die Latenz erhöht.

5. Angelegenheiten

Obwohl wir Sub-Queries , Verknüpfungen und Vereinigungen verwenden können, um eine Vielzahl von Abfragen zu erstellen, können nicht alle Datenbankoperationen mit nur einer oder wenigen Abfragen abgeschlossen werden. Meistens sind zum Abschließen einer Aufgabe eine Reihe von Anweisungen erforderlich. Wenn in diesem Fall jedoch die Ausführung einer Anweisung in diesem Block fehlschlägt, wird die Funktion des gesamten Blocks unsicher.

Stellen Sie sich vor, Sie möchten bestimmte Daten gleichzeitig in zwei verknüpfte Tabellen einfügen. Dabei kann folgende Situation eintreten: Nachdem die erste Tabelle erfolgreich aktualisiert wurde, tritt plötzlich eine unerwartete Situation in der Datenbank auf, die dazu führt, dass der Vorgang in der zweiten Tabelle nicht abgeschlossen werden kann. Dies führt zu unvollständigen Daten oder sogar zu einer Beschädigung der Daten in der Datenbank. Um diese Situation zu vermeiden, sollten Sie Transaktionen verwenden, die sicherstellen, dass jede Anweisung im Anweisungsblock entweder erfolgreich ist oder fehlschlägt.

Mit anderen Worten: Die Konsistenz und Integrität der Daten in der Datenbank kann gewahrt werden. Eine Transaktion beginnt mit dem Schlüsselwort BEGIN und endet mit dem Schlüsselwort COMMIT. Wenn während dieses Zeitraums eine SQL-Anweisung fehlschlägt, kann der Rollback-Befehl die Datenbank in den Zustand vor dem Beginn wiederherstellen.

BEGINNEN; 
INSERTINTOsalesinfoSETCustomerID=14;
UPDATEinventorySETQuantity=11WHEREitem='Buch';
BEGEHEN;

Eine weitere Funktion einer Transaktion besteht darin, dass sie, wenn mehrere Benutzer gleichzeitig dieselbe Datenquelle verwenden, den Benutzern durch Sperren der Datenbank einen sicheren Zugriffsmechanismus bieten kann. Auf diese Weise wird sichergestellt, dass die Vorgänge des Benutzers nicht durch andere Benutzer gestört werden.

Im Allgemeinen müssen Transaktionen vier Bedingungen erfüllen (ACID): Atomicity (auch als Unteilbarkeit bekannt), Consistency (auch als Isolation bekannt) und Durability .

  • Atomarität: Alle Vorgänge in einer Transaktion sind entweder abgeschlossen oder überhaupt nicht abgeschlossen und enden nicht in einem Zwischenstadium. Tritt während der Ausführung einer Transaktion ein Fehler auf, wird sie auf den Zustand zu Beginn der Transaktion zurückgesetzt, als wäre die Transaktion nie ausgeführt worden.
  • Konsistenz: Die Integrität der Datenbank wird vor Beginn und nach Ende der Transaktion nicht beeinträchtigt. Dies bedeutet, dass die geschriebenen Daten alle voreingestellten Regeln vollständig einhalten müssen, einschließlich der Genauigkeit und Verkettung der Daten und der Fähigkeit der nachfolgenden Datenbank, die geplanten Aufgaben spontan abzuschließen.
  • Isolation: Die Datenbank ermöglicht mehreren Transaktionen das gleichzeitige Lesen, Schreiben und Ändern ihrer Daten. Durch die Isolation können Dateninkonsistenzen aufgrund von Cross-Execution vermieden werden, wenn mehrere Transaktionen gleichzeitig ausgeführt werden. Es gibt verschiedene Ebenen der Transaktionsisolierung, darunter Read uncommitted , „Read Read committed “, repeateable read und „ Serializable .
  • Persistenz: Nach Abschluss der Transaktion sind die Änderungen an den Daten dauerhaft und gehen auch bei einem Systemausfall nicht verloren.

Probleme mit der Parallelität von Transaktionen:

  • Dirty Read: Transaktion A liest die von Transaktion B aktualisierten Daten und dann führt B den Vorgang zurück, sodass die von A gelesenen Daten schmutzige Daten sind.
  • Nicht wiederholbares Lesen: Transaktion A liest dieselbe Transaktion mehrmals. Während Transaktion A dieselbe Transaktion mehrmals liest, aktualisiert Transaktion B die Daten und schreibt sie fest. Dies führt zu inkonsistenten Ergebnissen, wenn Transaktion A dieselben Daten mehrmals liest.
  • Phantomlesen: Systemadministrator A ändert die Noten aller Studenten in der Datenbank von bestimmten Punktzahlen in ABCDE-Noten, aber Systemadministrator B fügt zu diesem Zeitpunkt einen Datensatz mit einer bestimmten Punktzahl ein. Wenn Systemadministrator A die Änderung abgeschlossen hat, stellt er fest, dass immer noch ein Datensatz vorhanden ist, der nicht geändert wurde, was einer Illusion gleicht. Dies wird als Phantomlesen bezeichnet.
  • Zusammenfassung: Nicht wiederholbare Lesevorgänge und Phantom-Lesevorgänge können leicht verwechselt werden. Bei nicht wiederholbaren Lesevorgängen stehen Änderungen im Mittelpunkt, während bei Phantom-Lesevorgängen Hinzufügungen oder Löschungen im Mittelpunkt stehen. Um das Problem nicht wiederholbarer Lesevorgänge zu lösen, müssen Sie nur die Zeilen sperren, die die Bedingungen erfüllen. Um das Problem von Phantom-Lesevorgängen zu lösen, müssen Sie die Tabelle sperren.

MySQL-Transaktionsisolierungsebenen

Transaktionskontrollanweisungen:

BEGIN oder START TRANSACTION : Starten Sie eine Transaktion explizit.

  • COMMIT: Sie können auch COMMIT WORK verwenden, aber die beiden sind gleichwertig. COMMIT führt eine Bestätigung der Transaktion durch und macht alle an der Datenbank vorgenommenen Änderungen dauerhaft.
  • Rollback: Sie können auch mit Rollback work arbeiten, aber die beiden sind gleichwertig. Ein Rollback beendet die Transaktion des Benutzers und macht alle laufenden, nicht festgeschriebenen Änderungen rückgängig.
  • SAVEPOINT-Kennung: SAVEPOINT ermöglicht das Erstellen eines Sicherungspunkts in einer Transaktion. Eine Transaktion kann mehrere SAVEPOINTs enthalten.
  • RELEASE SAVEPOINT-Kennung: Löscht den Speicherpunkt einer Transaktion. Wenn kein Speicherpunkt angegeben ist, wird bei der Ausführung dieser Anweisung eine Ausnahme ausgelöst.
  • ROLLBACK TO-Indikator: Rollt die Transaktion bis zum markierten Punkt zurück.
  • SET TRANSACTION: wird verwendet, um die Transaktionsisolationsebene festzulegen. Die von der InnoDB-Speicher-Engine bereitgestellten Transaktionsisolationsebenen sind READ UNCOMMITTED , READ COMMITTED , REPEATABLE READ und SERLALIZABLE .

6. Verwenden Sie Fremdschlüssel

Mit der Sperrtabellenmethode kann die Integrität der Daten gewahrt werden, die Relevanz der Daten kann jedoch nicht garantiert werden. Zu diesem Zeitpunkt können wir Fremdschlüssel verwenden. Beispiel: Ein Fremdschlüssel kann sicherstellen, dass jeder Verkaufsdatensatz auf einen bestehenden Kunden verweist.

Hier kann der Fremdschlüssel customerid in der Tabelle customerinfo customerid in der Tabelle salesinfo zuordnen. Datensätze ohne gültige customerid werden nicht aktualisiert oder in salesinfo eingefügt.

TABELLE ERSTELLEN Kundeninfo (Kunden-ID int Primärschlüssel) Engine = innodb;

CREATE TABLE salesinfo(salesid int not null,customerid int not null, Primärschlüssel(customerid,salesid),Fremdschlüssel(customerid) verweist beim Löschen der Kaskade auf customerinfo(customerid))engine = innodb;

Beachten Sie im Beispiel den Parameter „ on delete cascade “. Dieser Parameter sorgt dafür, dass beim Löschen eines Kundendatensatzes in customerinfo dieser ebenfalls automatisch gelöscht wird. Wenn Sie Fremdschlüssel in MySQL verwenden möchten, denken Sie beim Erstellen der Tabelle daran, den Tabellentyp als transaktionssicheren InnoDB Tabellentyp zu definieren. Dieser Typ ist nicht der Standardtyp für MySQL-Tabellen. Die Definitionsmethode besteht darin, engine=innoDB in der CREATE TABLE Anweisung hinzuzufügen.

7. Tabelle sperren

Obwohl Transaktionen eine sehr gute Möglichkeit darstellen, die Datenbankintegrität aufrechtzuerhalten, wirkt sich ihre Exklusivität manchmal auf die Datenbankleistung aus, insbesondere in großen Anwendungssystemen. Da die Datenbank während der Ausführung der Transaktion gesperrt ist, können andere Benutzeranforderungen nur vorübergehend warten, bis die Transaktion beendet ist.

Wenn ein Datenbanksystem nur von wenigen Benutzern verwendet wird, stellen die Auswirkungen von Transaktionen kein großes Problem dar. Wenn jedoch Tausende von Benutzern gleichzeitig auf ein Datenbanksystem zugreifen, beispielsweise auf eine E-Commerce-Website, kommt es zu erheblichen Reaktionsverzögerungen.

Tatsächlich können wir in manchen Fällen durch Sperren der Tabelle eine bessere Leistung erzielen. Das folgende Beispiel ist eine Methode zum Sperren einer Tabelle, um die Transaktionsfunktion im vorherigen Beispiel abzuschließen.

Hier verwenden wir eine select -Anweisung, um die Anfangsdaten abzurufen, führen einige Berechnungen durch und verwenden eine update -Anweisung, um die neuen Werte in die Tabelle einzuspielen. Die LOCKTABLE-Anweisung mit dem Schlüsselwort WRITE stellt sicher, dass kein anderer Zugriff auf inventory zum Einfügen, Aktualisieren oder Löschen von Daten möglich ist, bis der Befehl UNLOCKTABLES ausgeführt wird.

8. Verwenden Sie Indizes

Die Indizierung ist eine gängige Methode zur Verbesserung der Datenbankleistung. Sie ermöglicht es dem Datenbankserver, bestimmte Zeilen viel schneller abzurufen als ohne Index. Dies gilt insbesondere, wenn die Abfrage Befehle wie MAX(),MIN()和ORDERBY enthält.

Welche Felder sollten also indiziert werden?

Generell sollten Indizes für Felder erstellt werden, die für join , where -Anweisungen und orderby Sortierung verwendet werden. Versuchen Sie, keinen Index für ein Feld in der Datenbank zu erstellen, das eine große Anzahl wiederholter Werte enthält. Bei einem Feld vom Typ ENUM ist es sehr wahrscheinlich, dass eine große Anzahl wiederholter Werte auftritt.

Beispielsweise das Feld " province " in customerinfo . Das Erstellen eines Indexes für ein solches Feld ist nicht hilfreich; im Gegenteil, es kann sogar die Leistung der Datenbank verringern. Wir können entsprechende Indizes gleichzeitig mit der Erstellung der Tabelle erstellen oder wir können ALTERTABLE oder CREATEINDEX verwenden, um Indizes später zu erstellen.

Darüber hinaus unterstützt MySQL ab Version 3.23.23 die Volltextindizierung und -suche. Der Volltextindex in MySQL ist ein Index vom Typ FULLTEXT , kann jedoch nur für Tabellen vom Typ MyISAM verwendet werden. Bei einer großen Datenbank geht das Laden der Daten in eine Tabelle ohne FULLTEXT Index und das anschließende Erstellen des Index mit ALTERTABLE oder CREATEINDEX INDEX sehr schnell. Wenn Sie jedoch Daten in eine Tabelle laden, die bereits über einen FULLTEXT Index verfügt, ist der Ausführungsprozess sehr langsam.

9. Optimieren Sie die Abfrageanweisung

9.1 Keine Unterabfragen verwenden

Beispiel: SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang');

In MySQL 5.5 führt der interne Ausführungsplaner die Unterabfrage folgendermaßen aus: Zuerst wird die äußere Tabelle geprüft und dann die innere Tabelle abgeglichen, anstatt zuerst die innere Tabelle t2 zu prüfen. Wenn die Daten in der äußeren Tabelle sehr groß sind, ist die Abfragegeschwindigkeit sehr langsam.

In MariaDB10/MySQL5.6 wird die Join-Methode zur Optimierung verwendet. Diese SQL-Anweisung wird automatisch konvertiert in

Wählen Sie t1.* aus t1, verbinden Sie t2 auf t1.id = t2.id;

Beachten Sie jedoch, dass die Optimierung nur für SELECT wirksam ist, nicht für UPDATE / DELETE -Unterabfragen. Unterabfragen sollten in Produktionsumgebungen vermieden werden.

9.2 Funktionale Indizes vermeiden

Beispiel:

SELECT * FROM t WHERE YEAR(d) >= 2016;

Da MySQL keine funktionalen Indizes wie Oracle unterstützt, wird die gesamte Tabelle direkt gescannt, selbst wenn das Feld „d“ einen Index hat.

Sollte geändert werden in —–>

Wählen Sie * aus t, wobei d >= '01.01.2016' ist.

9.3 OR durch IN ersetzen

Ineffiziente Abfrage

SELECT * FROM t WHERE LOC_ID = 10 ODER LOC_ID = 20 ODER LOC_ID = 30;

—–> Effiziente Abfrage

Wählen Sie * aus t, wobei LOC_IN in (10,20,30) ist.

9.4 LIKE Doppelprozentzeichen kann keinen Index verwenden

Wählen Sie * aus t, wobei Name wie '%de%' ist;

—–>

Wählen Sie * aus t, wobei Name wie 'de%' lautet;

Derzeit unterstützt nur MySQL 5.7 die Volltextindizierung (unterstützt Chinesisch)

9.5 Lesen Sie die entsprechenden Datensätze LIMIT M,N

WÄHLEN SIE * VON t, WO 1;

—–>

WÄHLEN SIE * VON t, WO 1 LIMIT 10 ist;

9.6 Vermeidung von Datentypinkonsistenzen

Wählen Sie * aus t, wobei id = '19' ist;

—–>

Wählen Sie * aus t, wobei id = 19 ist.

9.7 Gruppenstatistiken können das Sortieren verhindern

Wählen Sie Waren-ID, Anzahl (*) aus. Wählen Sie GRUPPE NACH Waren-ID;

Standardmäßig sortiert MySQL alle Felder in GROUP BY col1 , col2 … Wenn Ihre Abfrage GROUP BY enthält und Sie den Aufwand zum Sortieren der Ergebnisse vermeiden möchten, können Sie ORDER BY NULL angeben, um die Sortierung zu unterdrücken.

—–>

Wählen Sie Waren-ID, Anzahl (*) aus. Wählen Sie aus t eine Gruppe nach Waren-ID aus. Bestellen Sie nach NULL.

9.8 Zufälliges Abrufen von Datensätzen vermeiden

Wählen Sie * aus t1, wobei 1 = 1 bestellen nach Rand () Limit 4;

MySQL unterstützt keine funktionalen Indizes, was zu einem vollständigen Tabellenscan führt—–>

Wählen Sie * aus t1, wobei ID >= CEIL (RAND() * 1000) LIMIT 4 ist;

9.9 Unnötige ORDER BY-Sortierungen vermeiden

SELECT Anzahl(1) FROM Benutzer u LEFT JOIN Benutzerinfo i ON u.id = i.user_id WHERE 1 = 1 ORDER BY u.create_time DESC;

—–>

SELECT Anzahl(1) FROM Benutzer u LEFT JOIN Benutzerinfo i ON u.id = i.user_id;

9.10 Stapel-INSERT

INSERT INTO t (id, name) VALUES(1,'Bea');
INSERT INTO t (id, name) VALUES(2,'Belle');
INSERT INTO t (id, name) VALUES(3,'Bernice');

—–>

INSERT INTO t (id, name) VALUES(1,'Bea'), (2,'Belle'),(3,'Bernice');

Damit ist dieser Artikel über 9 Techniken zur Optimierung von MySQL-Datenbanken abgeschlossen. Weitere Techniken zur Optimierung von MySQL-Datenbanken finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Prinzipien der MySQL-Datentypoptimierung
  • Strategie zur Optimierung der Leistung von MySQL-Datenbankabfragen
  • Prinzip des MySQL-Indexfehlers
  • Details zur zugrundeliegenden Datenstruktur von MySQL-Indizes
  • MySQL-Datenbankindizes und -Transaktionen
  • MySQL-Datenoptimierung - Mehrschichtiger Index

<<:  Analyse der praktischen Erfahrung bei der Verwendung von Docker zum Erstellen von Microservices mit SpringBoot

>>:  Lösung für das Problem, dass das Hintergrundbild eines Etiketts im IE8 nicht angezeigt wird

Artikel empfehlen

Django2.* + Mysql5.7-Entwicklungsumgebung Integrations-Tutorial-Diagramm

Umfeld: MAC_OS 10.12 Python 3.6 MySQL 5.7.25 Djan...

So verwenden Sie Navicat zum Bedienen von MySQL

Inhaltsverzeichnis Vorwort: 1. Einführung in Navi...

Design: Ein eigenwilliger Designer

<br />In meiner jahrelangen professionellen ...

Optimierung von JavaScript und CSS zur Verbesserung der Website-Leistung

<br /> Im ersten und zweiten Teil haben wir ...

Einführung in die Vue-Schaltflächenberechtigungssteuerung

Inhaltsverzeichnis 1. Schritte 1. Definieren Sie ...

Beispiel für die Verwendung eines manipulationssicheren JavaScript-Objekts

Inhaltsverzeichnis Manipulationssicheres Javascri...

Auszeichnungssprache – CSS-Stil für Webanwendungen

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

Eine kurze Diskussion über die Magie von parseInt() in JavaScript

Ursache Der Grund für das Schreiben dieses Blogs ...

js zum Schreiben des Karusselleffekts

In diesem Artikel wird der spezifische Code von j...

Grafisches Tutorial zur Deinstallation und Installation von MySQL unter Linux

Dies ist mein erster Blog. Ich bin seit zwei Jahr...

Detaillierte Erklärung zur Verwendung der Vue-Nummernschild-Eingabekomponente

Eine einfache Nummernschild-Eingabekomponente (vu...

MySQL: Praktische Erfahrung mit der Verwendung der Insert-Anweisung

Inhaltsverzeichnis 1. Mehrere Syntaxen von Insert...