search
HomeDatabaseMysql TutorialSummary of Mysql database optimization methods (must read)

This article brings you a summary of Mysql database optimization methods. It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

There is no end to learning, and database optimization is divided into various aspects. Here, I have made a relatively complete summary and shared it with colleagues who are working or studying.

Database optimization is divided into the following seven major aspects:

1 , The design of the table must conform to Three Normal Forms (Appropriate inverse three normal forms can also be);

2. Add appropriate indexes, indexes have a great impact on query speed , indexes must be added (primary key index, unique index, ordinary index, full-text index);

3. Add appropriate stored procedures, triggers, transactions, etc.;

4 , read and write separation (master-slave database);

5. Some optimizations of sql statements (sql statements with relatively slow query execution speed);

6. Table partitioning (Table splitting: Divide a large table into multiple tables. Partition: Allocate the contents of a table to different areas for storage );

7. Upgrade the mysql server hardware.

Next I will explain the optimization method in detail.

First and third normal form

First normal form:

Atomicity: The fields in the table cannot be divided any more. As long as it is a relational database, it will automatically meet the first normal form

Relational database (with the concept of rows and columns): mysql , sql server, oracle, db2, infomix, sybase, postgresql, when designing, first have the library->table->field->specific record (content): when storing data, the fields must be designed.

Non-relational database (generally referred to as nosql database): memcache, redis, momgodb, etc.

Second Normal Form:

There are no identical records in a table, which can be solved by using a primary key

Third Normal Form:

Redundant data cannot be stored in the table

Reverse three paradigm design:

##Album table1Life1002Work Photo100
ID Album name Album views
Photo
Photo List##ID123

If we want to calculate the views of an album, we can add the album views field to the album table, and update the album views at the same time when browsing photos.

2. Turn on slow query

Mysql slow query is turned off by default, and SQL statements that exceed 10 seconds are recorded by default.

1. View the slow query record time:

##

show variables like ‘long_query_time’;

2. Modify the slow query time:

set long_query_time=2;

3. Test through the following function:

benchmark(count,expr)   函数可以测试执行count次expr操作需要的时间

3. Create index

1. Primary key index Features:

(1) There is at most one primary key index in a table

(2) One primary key index can point to multiple columns

( 3) The columns of the primary key index cannot have duplicate values, nor can they have null

(4) The primary key index is highly efficient.

2. Characteristics of unique indexes:

(1) There can be multiple unique indexes in a table

(2) A unique index can point to multiple columns,

(3) If not null is not specified on the unique index, the column can be empty, and there can be multiple nulls at the same time,

(4) The unique index is more efficient.

3. Ordinary index:

Using ordinary index is mainly to improve query efficiency

4 , Full-text index

The full-text index mysql5.5 that comes with mysql does not support Chinese, but supports English. It also requires that the storage engine of the table is myisam. If you want to support Chinese, there are two options,

(1) Use aphinx Chinese version coreseek (to replace the full-text index)

(2) Plug-in mysqlcft.

Main problems with adding indexes:

(1) Indexes should be created for fields that are frequently used as query conditions,

the uniqueness is too high Poor fields are not suitable for creating an index alone, even if they are frequently used as query conditions, Fields that are updated very frequently are not suitable for creating an index

(2) will not appear in the WHERE clause Fields should not be indexed. The index comes at a cost. Although the query speed is improved, it

will affect the efficiency of additions and deletions. And the index file will take up space.

4. Table partitioning and partitioning

##Vertical partitioning Table (content main table additional table):
Content main table: stores some public information of various data, such as the name of the data, addition time, etc.,

You can use multiple additional tables, which store unique information about some data.

The main reason is that the data in the main content table is accessed more frequently.

Features: different table structures


Horizontal table splitting:

The data exists in different tables

.

Features: The same table structure


##Partition:


is to store a table in different areas of the disk, but it is still one table.

Basic concepts:

(1)Range (range) – This mode allows the data to be divided into different scope. For example, a table can be divided into several partitions by year.

(2)List (predefined list) – This mode allows the system to split data by the value of a predefined list.

(3)Hash (Hash) – This mode allows calculation of the Hash Key of one or more columns of the table, and finally the data corresponding to different values ​​​​of this Hash code Areas are divided. For example, you can create a table that partitions the table's primary key.

(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里面有文件锁,在实际的项目中多数使用文件锁,因为表锁,会阻塞,当对一些表添加写锁后,其他进程就不能操作了。这样会阻塞整个网站,会拖慢网站的速度。

相关推荐:



Photo Name Album ID Views
My puppy 1 49
My kitten 1 51
My colleagues 2 100

The above is the detailed content of Summary of Mysql database optimization methods (must read). For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
MySQL: BLOB and other no-sql storage, what are the differences?MySQL: BLOB and other no-sql storage, what are the differences?May 13, 2025 am 12:14 AM

MySQL'sBLOBissuitableforstoringbinarydatawithinarelationaldatabase,whileNoSQLoptionslikeMongoDB,Redis,andCassandraofferflexible,scalablesolutionsforunstructureddata.BLOBissimplerbutcanslowdownperformancewithlargedata;NoSQLprovidesbetterscalabilityand

MySQL Add User: Syntax, Options, and Security Best PracticesMySQL Add User: Syntax, Options, and Security Best PracticesMay 13, 2025 am 12:12 AM

ToaddauserinMySQL,use:CREATEUSER'username'@'host'IDENTIFIEDBY'password';Here'showtodoitsecurely:1)Choosethehostcarefullytocontrolaccess.2)SetresourcelimitswithoptionslikeMAX_QUERIES_PER_HOUR.3)Usestrong,uniquepasswords.4)EnforceSSL/TLSconnectionswith

MySQL: How to avoid String Data Types common mistakes?MySQL: How to avoid String Data Types common mistakes?May 13, 2025 am 12:09 AM

ToavoidcommonmistakeswithstringdatatypesinMySQL,understandstringtypenuances,choosetherighttype,andmanageencodingandcollationsettingseffectively.1)UseCHARforfixed-lengthstrings,VARCHARforvariable-length,andTEXT/BLOBforlargerdata.2)Setcorrectcharacters

MySQL: String Data Types and ENUMs?MySQL: String Data Types and ENUMs?May 13, 2025 am 12:05 AM

MySQloffersechar, Varchar, text, Anddenumforstringdata.usecharforfixed-Lengthstrings, VarcharerForvariable-Length, text forlarger text, AndenumforenforcingdataAntegritywithaetofvalues.

MySQL BLOB: how to optimize BLOBs requestsMySQL BLOB: how to optimize BLOBs requestsMay 13, 2025 am 12:03 AM

Optimizing MySQLBLOB requests can be done through the following strategies: 1. Reduce the frequency of BLOB query, use independent requests or delay loading; 2. Select the appropriate BLOB type (such as TINYBLOB); 3. Separate the BLOB data into separate tables; 4. Compress the BLOB data at the application layer; 5. Index the BLOB metadata. These methods can effectively improve performance by combining monitoring, caching and data sharding in actual applications.

Adding Users to MySQL: The Complete TutorialAdding Users to MySQL: The Complete TutorialMay 12, 2025 am 12:14 AM

Mastering the method of adding MySQL users is crucial for database administrators and developers because it ensures the security and access control of the database. 1) Create a new user using the CREATEUSER command, 2) Assign permissions through the GRANT command, 3) Use FLUSHPRIVILEGES to ensure permissions take effect, 4) Regularly audit and clean user accounts to maintain performance and security.

Mastering MySQL String Data Types: VARCHAR vs. TEXT vs. CHARMastering MySQL String Data Types: VARCHAR vs. TEXT vs. CHARMay 12, 2025 am 12:12 AM

ChooseCHARforfixed-lengthdata,VARCHARforvariable-lengthdata,andTEXTforlargetextfields.1)CHARisefficientforconsistent-lengthdatalikecodes.2)VARCHARsuitsvariable-lengthdatalikenames,balancingflexibilityandperformance.3)TEXTisidealforlargetextslikeartic

MySQL: String Data Types and Indexing: Best PracticesMySQL: String Data Types and Indexing: Best PracticesMay 12, 2025 am 12:11 AM

Best practices for handling string data types and indexes in MySQL include: 1) Selecting the appropriate string type, such as CHAR for fixed length, VARCHAR for variable length, and TEXT for large text; 2) Be cautious in indexing, avoid over-indexing, and create indexes for common queries; 3) Use prefix indexes and full-text indexes to optimize long string searches; 4) Regularly monitor and optimize indexes to keep indexes small and efficient. Through these methods, we can balance read and write performance and improve database efficiency.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor