20+条MySQL性能优化的最佳经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。
1. 为查询缓存优化你的查询大多数的MySQL服务器都开启了查询缓存。这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。
这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。请看下面的示例:
// 查询缓存不开启 $r = mysql_query("SELECT username FROM user WHERE signup_date >= CURDATE()"); // 开启查询缓存 $today = date("Y-m-d"); $r = mysql_query("SELECT username FROM user WHERE signup_date >= '$today'");上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。
2. EXPLAIN 你的 SELECT 查询使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的……等等,等等。
挑一个你的SELECT语句(推荐挑选那个最复杂的,有多表联接的),把关键字EXPLAIN加到前面。你可以使用phpmyadmin来做这个事。然后,你会看到一张表格。下面的这个示例中,我们忘记加上了group_id索引,并且有表联接:
当我们为 group_id 字段加上索引后:
我们可以看到,前一个结果显示搜索了 7883 行,而后一个只是搜索了两个表的 9 和 16 行。查看rows列可以让我们找到潜在的性能问题。
3. 当只要一行数据时使用 LIMIT 1当你查询表的有些时候,你已经知道结果只会有一条结果,但因为你可能需要去fetch游标,或是你也许会去检查返回的记录数。
在这种情况下,加上 LIMIT 1 可以增加性能。这样一样,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
下面的示例,只是为了找一下是否有“中国”的用户,很明显,后面的会比前面的更有效率。(请注意,第一条中是Select *,第二条是Select 1)
// 没有效率的: $r = mysql_query("SELECT * FROM user WHERE country = 'China'"); if (mysql_num_rows($r) > 0) { // ... } // 有效率的: $r = mysql_query("SELECT 1 FROM user WHERE country = 'China' LIMIT 1"); if (mysql_num_rows($r) > 0) { // ... } 4. 为搜索字段建索引索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么,请为其建立索引吧。
从上图你可以看到那个搜索字串 “last_name LIKE 'a%'”,一个是建了索引,一个是没有索引,性能差了4倍左右。
另外,你应该也需要知道什么样的搜索是不能使用正常的索引的。例如,当你需要在一篇大的文章中搜索一个词时,如: “WHERE post_content LIKE '%apple%'”,索引可能是没有意义的。你可能需要使用MySQL全文索引 或是自己做一个索引(比如说:搜索关键词或是Tag什么的)
5. 在Join表的时候使用相当类型的列,并将其索引如果你的应用程序有很多 JOIN 查询,你应该确认两个表中Join的字段是被建过索引的。这样,MySQL内部会启动为你优化Join的SQL语句的机制。
而且,这些被用来Join的字段,应该是相同的类型的。例如:如果你要把 DECIMAL 字段和一个 INT 字段Join在一起,MySQL就无法使用它们的索引。对于那些STRING类型,还需要有相同的字符集才行。(两个表的字符集有可能不一样)
// 在state中查找company $r = mysql_query("SELECT company_name FROM users LEFT JOIN companies ON (users.state = companies.state) WHERE users.id = $user_id"); // 两个 state 字段应该是被建过索引的,而且应该是相当的类型,相同的字符集。 6. 千万不要 ORDER BY RAND()想打乱返回的数据行?随机挑一个数据?真不知道谁发明了这种用法,但很多新手很喜欢这样用。但你却不了解这样做有多么可怕的性能问题。
如果你真的想把返回的数据行打乱了,你有N种方法可以达到这个目的。这样使用只让你的数据库的性能呈指数级的下降。这里的问题是:MySQL会不得不去执行RAND()函数(很耗CPU时间),而且这是为了每一行记录去记行,然后再对其排序。就算是你用了Limit 1也无济于事(因为要排序)
下面的示例是随机挑一条记录
// 千万不要这样做: $r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); // 这要会更好: $r = mysql_query("SELECT count(*) FROM user"); $d = mysql_fetch_row($r); $rand = mt_rand(0,$d[0] - 1); $r = mysql_query("SELECT username FROM user LIMIT $rand, 1"); 7. 避免 SELECT *从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





Wie optimiert man die MySQL-Verbindungsgeschwindigkeit? Überblick: MySQL ist ein weit verbreitetes relationales Datenbankverwaltungssystem, das häufig zur Datenspeicherung und -verwaltung in einer Vielzahl von Anwendungen verwendet wird. Während der Entwicklung ist die Optimierung der MySQL-Verbindungsgeschwindigkeit von entscheidender Bedeutung für die Verbesserung der Anwendungsleistung. In diesem Artikel werden einige gängige Methoden und Techniken zur Optimierung der MySQL-Verbindungsgeschwindigkeit vorgestellt. Inhaltsverzeichnis: Verwenden Sie Verbindungspools, um Verbindungsparameter anzupassen und Netzwerkeinstellungen zu optimieren. Verwenden Sie Indizes und Caches, um lange inaktive Verbindungen zu vermeiden. Konfigurieren Sie geeignete Hardwareressourcen.

Im aktuellen Internetzeitalter liegt die Bedeutung von Daten auf der Hand. Als eine der Kernkomponenten von Internetanwendungen ist die Sicherung und Wiederherstellung von Datenbanken besonders wichtig. Da jedoch die Datenmenge weiter zunimmt und die Geschäftsanforderungen immer komplexer werden, können herkömmliche Datenbanksicherungs- und -wiederherstellungslösungen die hohen Verfügbarkeits- und Leistungsanforderungen moderner Anwendungen nicht mehr erfüllen. Daher ist die Optimierung der Sicherungs- und Wiederherstellungsleistung der MySQL-Datenbank zu einem dringenden Problem geworden, das gelöst werden muss. In der Praxis haben wir eine Reihe von Projekterfahrungen übernommen, um MySQL-Daten effektiv zu verbessern

So verbessern Sie die Leistung durch Optimierung der AVG-Funktion in MySQL MySQL ist ein beliebtes relationales Datenbankverwaltungssystem, das viele leistungsstarke Funktionen und Funktionen enthält. Die AVG-Funktion wird häufig zur Berechnung von Durchschnittswerten verwendet. Da diese Funktion jedoch den gesamten Datensatz durchlaufen muss, führt sie bei großen Datenmengen zu Leistungsproblemen. In diesem Artikel wird detailliert beschrieben, wie Sie die AVG-Funktion über MySQL optimieren können, um die Leistung zu verbessern. 1. Verwendung von Indizes Indizes sind der wichtigste Teil der MySQL-Optimierung.

MySQL-Optimierung basierend auf der TokuDB-Engine: Verbesserung der Schreib- und Komprimierungsleistung Einführung: Als häufig verwendetes relationales Datenbankverwaltungssystem ist MySQL im Kontext des Big-Data-Zeitalters einem zunehmenden Schreibdruck und zunehmenden Speicheranforderungen ausgesetzt. Um dieser Herausforderung gerecht zu werden, wurde die TokuDB-Engine ins Leben gerufen. In diesem Artikel wird erläutert, wie Sie mithilfe der TokuDB-Engine die Schreib- und Komprimierungsleistung von MySQL verbessern. 1. Was ist die TokuDB-Engine? Die TokuDB-Engine ist eine Big-Data-orientierte Engine, die für die Bewältigung hoher Schreibvorgänge entwickelt wurde

MySQL ist ein weit verbreitetes relationales Datenbankverwaltungssystem, das häufig für die Entwicklung von Webanwendungen und die Datenspeicherung verwendet wird. In praktischen Anwendungen ist die zugrunde liegende Optimierung von MySQL besonders wichtig, wobei die erweiterte Optimierung von SQL-Anweisungen der Schlüssel zur Verbesserung der Datenbankleistung ist. In diesem Artikel werden einige Tipps und Best Practices für die Implementierung der zugrunde liegenden Optimierung von MySQL sowie spezifische Codebeispiele vorgestellt. Bestimmen Sie die Abfragebedingungen. Beim Schreiben von SQL-Anweisungen müssen Sie zunächst die Abfragebedingungen klar definieren und die Verwendung unbegrenzter Platzhalterabfragen vermeiden, d. h. die Verwendung von „%“ zum Öffnen der Abfrage vermeiden.

Praktischer Leitfaden zur MySQL-Leistungsoptimierung: Detailliertes Verständnis von B+-Baumindizes Einführung: Als relationales Open-Source-Datenbankverwaltungssystem wird MySQL in verschiedenen Bereichen häufig verwendet. Da jedoch die Datenmenge weiter zunimmt und die Abfrageanforderungen immer komplexer werden, treten die Leistungsprobleme von MySQL immer stärker in den Vordergrund. Unter diesen sind das Design und die Verwendung von Indizes einer der Schlüsselfaktoren, die die Leistung von MySQL beeinflussen. In diesem Artikel wird das Prinzip des B+-Baumindex vorgestellt und anhand tatsächlicher Codebeispiele gezeigt, wie die Leistung von MySQL optimiert werden kann. 1. Prinzip des B+-Baumindex Der B+-Baum ist ein

MySQL ist ein relationales Datenbankverwaltungssystem, das im Bereich E-Commerce weit verbreitet ist. Bei E-Commerce-Anwendungen ist es entscheidend, MySQL zu optimieren und zu sichern. In diesem Artikel werden die Optimierungs- und Sicherheitsprojekterfahrungen von MySQL in E-Commerce-Anwendungen analysiert. 1. Datenbankarchitekturdesign zur Leistungsoptimierung: Bei E-Commerce-Anwendungen ist das Datenbankdesign der Schlüssel. Ein angemessenes Design der Tabellenstruktur und des Indexes kann die Abfrageleistung der Datenbank verbessern. Gleichzeitig kann die Verwendung der Technologie zur Tabellenaufteilung und -partitionierung die Datenmenge in einer einzelnen Tabelle reduzieren und die Abfrageeffizienz verbessern.

Mit der rasanten Entwicklung des Internets ist die MySQL-Datenbank zur zentralen Datenspeichertechnologie für viele Websites, Anwendungen und sogar Unternehmen geworden. Mit dem kontinuierlichen Wachstum des Datenvolumens und der starken Zunahme des gleichzeitigen Zugriffs sind die Leistungsprobleme von MySQL jedoch immer deutlicher geworden. Aufgrund ihrer effizienten und stabilen Leistung wird die PDO-Klasse von PHP auch häufig bei der Entwicklung und dem Betrieb von MySQL verwendet. In diesem Artikel stellen wir vor, wie Sie die PDO-Klasse verwenden, um die MySQL-Leistung zu optimieren und die Antwortgeschwindigkeit und die gleichzeitigen Zugriffsmöglichkeiten der Datenbank zu verbessern. 1. Einführung in die PDO-Klasse
