Heim >Datenbank >MySQL-Tutorial >Zusammenfassung der MySQL-Datenbankoptimierungsmethoden (muss gelesen werden)
Der Inhalt dieses Artikels ist eine Zusammenfassung der MySQL-Datenbankoptimierungsmethoden. Ich hoffe, dass er für Freunde hilfreich ist.
Das Lernen hat kein Ende und die Datenbankoptimierung ist in verschiedene Aspekte unterteilt. Hier habe ich eine relativ vollständige Zusammenfassung erstellt und sie mit Kollegen geteilt, die arbeiten oder studieren.
Datenbankoptimierung gliedert sich in die folgenden sieben Aspekte:
1 , Das Design der Tabelle muss den Drei Normalformen entsprechen (Geeignete umgekehrte drei Normalformen können ebenfalls verwendet werden);
2 Einen großen Einfluss auf die Abfragegeschwindigkeit haben Indizes (Primärschlüsselindex, gewöhnlicher Index, Volltextindex
3). Transaktionen usw.; 4, Lese- und Schreibtrennung (Master-Slave-Datenbank); 5 >6. Tabellenpartitionierung (
Tabellenaufteilung: Teilen Sie eine große Tabelle in mehrere Tabellen. Partitionieren: Weisen Sie den Inhalt einer Tabelle verschiedenen Speicherbereichen zu7 die MySQL-Server-Hardware.
Als nächstes werde ich die Optimierungsmethode im Detail erläutern.Erste und dritte Normalform
Erste Normalform:
Atomizität: Die Felder in der Tabelle können nicht mehr geteilt werden. Solange es sich um eine relationale Datenbank handelt, entspricht sie natürlich der ersten Normalform
Relationale Datenbank (mit den Konzepten von Zeilen und Spalten). )
: MySQL, SQL Server, Oracle, DB2, Infomix, Sybase, Postgresql. Beim Entwerfen müssen Sie zuerst den bibliotheks-> tabellen-> feld-> spezifischen Datensatz (Inhalt) haben: Beim Speichern von Daten müssen die Felder entworfen werden .Nicht relationale Datenbank (allgemein als NoSQL-Datenbank bezeichnet): Memcache, Redis, Momgodb usw.
Zweite Normalform:Es gibt keine identischen Datensätze in einer Tabelle, die mithilfe eines Primärschlüssels gelöst werden können
Dritte Normalform:
Redundante Daten können nicht in der Tabelle gespeichert werden
ID | Albumname
|
|
|||||||||||||||||||||||||
1 | LebenFotos | 100 | tr>|||||||||||||||||||||||||
2 | Arbeitsfoto | 100 |
Wenn wir die Aufrufe eines Albums berechnen möchten, können wir das Feld „Albumansichten“ zur Albumtabelle hinzufügen und beim Durchsuchen von Fotos gleichzeitig die Albumansichten aktualisieren.
2. Langsame Abfrage aktivieren
Die langsame MySQL-Abfrage ist standardmäßig deaktiviert, SQL-Anweisungen, die länger als 10 Sekunden dauern, ebenfalls standardmäßig aufgezeichnet.
1. Sehen Sie sich die langsame Abfragezeit an:
show variables like ‘long_query_time’;2. Ändern Sie die langsame Abfragezeit :
set long_query_time=2;3. Testen Sie die folgende Funktion:
benchmark(count,expr) 函数可以测试执行count次expr操作需要的时间
3. Index erstellen
1 Funktionen:
(1) Es gibt höchstens einen Primärschlüsselindex in einer Tabelle (2) Ein Primärschlüsselindex kann auf mehrere Spalten verweisen ( 3) Die Spalten des Primärschlüsselindex dürfen weder doppelte Werte noch Nullwerte haben (4) Der Primärschlüsselindex ist hocheffizient.2. Merkmale eindeutiger Indizes:
3. Gewöhnlicher Index:
Die Verwendung eines gewöhnlichen Index dient hauptsächlich der Verbesserung der Abfrageeffizienz4, Volltextindex
Der mit MySQL gelieferte Volltextindex mysql5.5 unterstützt kein Chinesisch, sondern Englisch. Außerdem muss die Speicher-Engine der Tabelle myisam sein . Wenn Sie Chinesisch unterstützen möchten, gibt es zwei Möglichkeiten: (1) Verwenden Sie die chinesische Aphinx-Version coreseek (um den Volltextindex zu ersetzen) (2) Plug-in mysqlcft.Hauptprobleme beim Hinzufügen eines Index:
(1) Für Felder, die häufig als Abfragebedingungen verwendet werden, sollten Indizes erstellt werdenDie Eindeutigkeit ist zu hoch. Schlechte Felder eignen sich nicht für die separate Erstellung von Indizes, auch wenn sie häufig als Abfragebedingungen verwendet werden, Felder, die sehr häufig aktualisiert werden, eignen sich nicht für die separate Erstellung von Indizes
(2) erscheint nicht in der WHERE-Klausel. Felder sollten nicht indiziert werden. Obwohl die Abfragegeschwindigkeit verbessert wird,wird die Effizienz von Hinzufügungen und Löschungen beeinträchtigt . Und die Indexdatei wird Speicherplatz beanspruchen.
4. Tabellen und Partitionen
Vertikale Partitionstabelle (Inhaltshaupttabelle + zusätzliche Tabelle):
Sie können mehrere zusätzliche Tabellen verwenden, die eindeutige Informationen zu einigen Daten speichern.
Der Hauptgrund: Auf die Daten in der Inhaltsstammtabelle wird häufig zugegriffen.
Features: verschiedene Tabellenstrukturen
Horizontale Tabellenaufteilung:
Übersetzen Sie die Tabellendaten sind in verschiedenen Tabellen vorhanden .
Eigenschaften: Gleiche Tabellenstruktur
Partition:
besteht darin, eine Tabelle in verschiedenen Bereichen der Festplatte zu speichern, aber es ist immer noch eine Tabelle.
Grundkonzepte:
(1)Bereich – In diesem Modus können Daten in verschiedene Bereiche unterteilt werden. Beispielsweise kann eine Tabelle nach Jahr in mehrere Partitionen unterteilt werden.
(2)Liste (vordefinierte Liste) – In diesem Modus kann das System Daten nach dem Wert einer vordefinierten Liste aufteilen.
(3)Hash (Hash) – Dieser Modus ermöglicht die Berechnung des Hash-Schlüssels einer oder mehrerer Spalten der Tabelle und schließlich der Daten, die verschiedenen Werten von entsprechen Diese Hash-Code-Bereiche sind unterteilt. Sie können beispielsweise eine Tabelle erstellen, die den Primärschlüssel der Tabelle partitioniert.
(4)Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
分区表的限制:
(1)只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列。
(2)最大分区数目不能超过1024。
(3)如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
(4)按日期进行分区很非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多。
五、并发处理的锁机制
锁机制:在执行时,只有一个用户获得锁,其他用户处于阻塞状态,需要等待解锁。
mysql 的锁有以下几种形式:
表级锁:开销小,加锁快,发生锁冲突的概率最高,并发度最低。myisam引擎属于这种类型。
行级锁:开销大,加锁慢,发生锁冲突的概率最低,并发度也最高。innodb属于这种类型。
表锁的演示:
1.对myisam表的读操作(加读锁),不会阻塞其他进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其他进程的操作。
2.表添加读锁后,其他进程对该表只能查询操作,修改时会被阻塞。
3.当前进程,能够执行查询操作,不能执行修改操作。不能对没有锁定的表进行操作。
4.锁表的语法:
lock table 表名 read|write
5.也可以锁定多个表
6.对myisam表的写操作(加写锁),会阻塞其他进程对锁定表的任何操作,不能读写,
7.表加写锁后,则只有当前进程对锁定的表,可以执行任何操作。其他进程的操作会被阻塞。
行锁的演示:
1.innodb存储引擎是通过给索引上的索引项加锁来实现的,这就意味着:只有通过索引条件检索数据,innodb才会使用行级锁,否则,innodb使用表锁。
2.开启行锁后,当前进程在针对某条记录执行操作时,其他进程不能操作和当前进程相同id的记录。
php里面有文件锁,在实际的项目中多数使用文件锁,因为表锁,会阻塞,当对一些表添加写锁后,其他进程就不能操作了。这样会阻塞整个网站,会拖慢网站的速度。
相关推荐:
Das obige ist der detaillierte Inhalt vonZusammenfassung der MySQL-Datenbankoptimierungsmethoden (muss gelesen werden). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!