Indexes are the key to speeding up queries in MySQL. If the index is properly designed, it can effectively improve query efficiency; on the contrary, if it is improperly designed, query efficiency may be affected.
Here are some common index optimization tips:
Use fewer indexes and avoid creating too many indexes, because creating indexes will reduce write performance.
Choose appropriate data types, such as using integer type primary keys and foreign keys, which is more efficient than using UUID type primary keys and foreign keys.
Generally, it is necessary to ensure the selectivity of the index, that is, the ratio of the number of different values in the index to the number of different values in the table is higher than a threshold, which is usually about 10%. If the selectivity of the index is too low, the index's optimization effect on the query will be very limited.
Avoid using functions that MySQL does not support in queries, as this will cause the index to be unusable.
Use a covering index, that is, you only need to return the query results through the index without having to access other columns of the table. This can greatly improve query performance.
By partitioning a large table, dividing the table into multiple sub-tables, and storing data in different sub-tables according to the partition key, query and delete operations can be made more efficient.
Create index:
CREATE INDEX idx_user_email ON user (email);
Use index:
SELECT name FROM user WHERE email = 'example@example.com';
Query is one of the most common operations in MySQL one. In order to improve the efficiency of queries, some query optimization techniques must be followed.
Here are some common query optimization tips:
Use LIMIT to limit query results to avoid returning too many rows.
Use the EXISTS or NOT EXISTS subquery in the query instead of the IN or NOT IN subquery.
Avoid using LIKE clauses in queries, especially when wildcard characters appear at the beginning of the LIKE clause.
Use UNION or UNION ALL to combine multiple query results and avoid using subqueries.
Use GROUP BY and aggregate functions to aggregate data instead of using the DISTINCT keyword.
Avoid using the ORDER BY clause in queries, especially when processing large amounts of data.
When using JOIN operations, use INNER JOIN operations instead of LEFT JOIN or RIGHT JOIN operations to improve query performance.
Avoid using the OR operator in queries, especially when there are many query conditions.
Use LIMIT:
SELECT name FROM user LIMIT 10;
Use EXISTS:
SELECT name FROM user WHERE EXISTS (SELECT * FROM order WHERE user.id = order.user_id);
Use GROUP BY:
SELECT name, SUM(amount) FROM order GROUP BY name;
Use INNER JOIN:
SELECT user.name, order.amount FROM user INNER JOIN order ON user.id = order.user_id;
In addition to index and query optimization, the performance and reliability of MySQL can also be improved by optimizing the database design.
The following are some common database optimization tips:
Use the InnoDB engine instead of the MyISAM engine, because InnoDB supports transactions and row-level locks, which can improve concurrency. reliability and data integrity.
Avoid using BLOB or TEXT columns in tables because these columns can cause a lot of IO operations.
When designing tables, avoid using too many NULL values, as this will waste a lot of storage space.
To avoid storing too much data in one table, you can split the table into multiple sub-tables to improve query performance.
Regularly clean up useless data in the database to avoid performance degradation caused by excessive data volume.
Configure the correct cache settings, including query cache and InnoDB cache.
Use InnoDB engine:
CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50) ) ENGINE=InnoDB;
Avoid using BLOB or TEXT columns:
CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50), content TEXT );
Avoid using too many NULL values:
CREATE TABLE user ( id INT PRIMARY KEY, name VARCHAR(50), age INT NOT NULL );
Split table:
CREATE TABLE user_1 ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50) ); CREATE TABLE user_2 ( id INT PRIMARY KEY, address VARCHAR(100), phone VARCHAR(20) );
Regular cleaning of data:
DELETE FROM user WHERE created_at < '2022-01-01';
Configuration cache:
SET GLOBAL query_cache_size = 1073741824;
The above is the detailed content of What are the operating methods related to database MySQL performance optimization and complex queries?. For more information, please follow other related articles on the PHP Chinese website!