


A brief analysis of code examples of MySQL-data table partitioning technology PARTITION
This article mainly introduces a brief analysis of Mysql data table partitioning technology PARTITION, and introduces the partitioning technologies RANGE, LIST, and HASH in Mysql respectively. Friends in need can refer to it.
In this chapter, let’s learn about the partitioning technology (RANGE, LIST, HASH) in Mysql
Mysql’s partitioning technology is somewhat similar to horizontal table partitioning, but it is based on The horizontal table partitioning performed by the logical layer is still a table for the application. In other words: partitioning does not actually split a table. After partitioning, the table is still a table. It splits the storage files. .
In Mysql 5.1 (later) there are several partition types:
RANGE partitioning: assign multiple rows to partitions based on column values belonging to a given continuous range
LIST partitioning: similar to partitioning by RANGE, the difference is that LIST partitioning is based on the column value matching a value in a discrete value set to select
HASH partitioning: based on the return value of a user-defined expression To select partitioning, this expression is calculated using the column values of the rows to be inserted into the table. This function can contain any expression valid in Mysql that produces a non-negative integer value
KEY partitioning: Compared with partitioning by HASH, the difference is that KEY partition only supports calculation of one or more columns, and the Mysql server provides its own hash function
Things that should be paid attention to when partitioning:
1. When doing partitioning, either do not define the primary key, or add the partition field to the primary key
2. The partition field cannot be NULL, otherwise how to determine the partition range, so try to NOT NULL
First you can check Check whether your Mysql version supports PARTITION
mysql> show plugins; | partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
or:
mysql> show variables like "%part%"; +-------------------+-------+ | Variable_name | Value | +-------------------+-------+ | have_partitioning | YES | +-------------------+-------+
RANGE Partition
Assume that you create a table as follows, which saves There are employee records of 20 video stores. These 20 video stores are numbered from 1 to 20. If you want to divide it into 4 small partitions, then you can use RANGE partition. The created database table is as follows:
mysql-> CREATE TABLE employees ( -> id INT NOT NULL, -> fname VARCHAR(30), -> lname VARCHAR(30), -> hired DATE NOT NULL DEFAULT '1970-01-01', -> separated DATE NOT NULL DEFAULT '9999-12-31', -> job_code INT NOT NULL, -> store_id INT NOT NULL -> ) ENGINE=Myisam DEFAULT CHARSET=utf8 -> PARTITION BY RANGE (store_id) ( -> PARTITION P0 VALUES LESS THAN (6), -> PARTITION P1 VALUES LESS THAN (11), -> PARTITION P2 VALUES LESS THAN (16), -> PARTITION P3 VALUES LESS THAN (21) -> );
If you want to store employees who resigned in different periods separately, then you can use the date field separated (i.e. separation time) as a key, the created SQL statement is as follows:
mysql-> CREATE TABLE employees ( -> id INT NOT NULL, -> fname VARCHAR(30), -> lname VARCHAR(30), -> hired DATE NOT NULL DEFAULT '1970-01-01', -> separated DATE NOT NULL DEFAULT '9999-12-31', -> job_code INT NOT NULL, -> store_id INT NOT NULL -> ) ENGINE=Myisam DEFAULT CHARSET=utf8 -> PARTITION BY RANGE (YEAR(separated)) ( -> PARTITION P0 VALUES LESS THAN (2001), -> PARTITION P1 VALUES LESS THAN (2011), -> PARTITION P2 VALUES LESS THAN (2021), -> PARTITION P3 VALUES LESS THAN MAXVALUE -> );
List partition
Same example, if these 20 video stores Distributed in 4 regions with distribution rights,
+------------------+--------------------------------------+ | 地区 | 音像店 ID 号 | +------------------+--------------------------------------+ | 北区 | 3, 5, 6, 9, 17 | | 东区 | 1, 2, 10, 11, 19, 20 | | 西区 | 4, 12, 13, 14, 18 | | 中心区 | 7, 8, 15, 16 | +------------------+--------------------------------------+ mysql-> CREATE TABLE employees ( -> id INT NOT NULL, -> fname VARCHAR(30), -> lname VARCHAR(30), -> hired DATE NOT NULL DEFAULT '1970-01-01', -> separated DATE NOT NULL DEFAULT '9999-12-31', -> job_code INT NOT NULL, -> store_id INT NOT NULL -> ) ENGINE=Myisam DEFAULT CHARSET=utf8 -> PARTITION BY LIST (store_id) ( -> PARTITION pNorth VALUES IN (3, 5, 6, 9, 17), -> PARTITION pEast VALUES IN (1, 2, 10, 11, 19, 20), -> PARTITION pWest VALUES IN (4, 12, 13, 14, 18), -> PARTITION pCentral VALUES IN (7, 8, 15, 16) -> );
After you create it, you can enter the Mysql data storage file. The folder location is defined in the Mysql configuration file
shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf; [mysqld] datadir = /var/lib/mysql shawn@Shawn:~$ cd /var/lib/mysql/dbName shawn@Shawn:/var/lib/mysql/dbName$ ll 显示如下: 8768 Jun 7 22:01 employees.frm 48 Jun 7 22:01 employees.par 0 Jun 7 22:01 employees#P#pCentral.MYD 1024 Jun 7 22:01 employees#P#pCentral.MYI 0 Jun 7 22:01 employees#P#pEast.MYD 1024 Jun 7 22:01 employees#P#pEast.MYI 0 Jun 7 22:01 employees#P#pNorth.MYD 1024 Jun 7 22:01 employees#P#pNorth.MYI 0 Jun 7 22:01 employees#P#pWest.MYD 1024 Jun 7 22:01 employees#P#pWest.MYI
As you can see from here, it splits the storage files according to our definition
employees.frm = 表结构 employees.par = partition, 申明是一个分区表 .MYD = 数据文件 .MYI = 索引文件
HASH partition
HASH partition main Used to ensure that data is evenly distributed among a predetermined number of partitions
If you want to store employees who joined in different periods separately, then you can use the date field hired as a key
mysql-> CREATE TABLE employees ( -> id INT NOT NULL, -> fname VARCHAR(30), -> lname VARCHAR(30), -> hired DATE NOT NULL DEFAULT '1970-01-01', -> separated DATE NOT NULL DEFAULT '9999-12-31', -> job_code INT NOT NULL, -> store_id INT NOT NULL -> ) ENGINE=Myisam DEFAULT CHARSET=utf8 -> PARTITION BY HASH (YEAR(hired)) ( -> PARTITIONS 4 -> ); #这里注意的是 PARTITIONS, 多了一个 s
Here It should be mentioned that the above examples all use the Myisam storage engine, which uses independent table spaces by default, so you can see different partitions in the disk space above
while the InnoDB engine uses shared tables by default Space, at this time, even if you partition the InnoDB table, you will find that it is not physically partitioned like Myisam, so you need to modify the Mysql configuration file:
shawn@Shawn:~$ sudo vi /etc/mysql/my.cnf; #添加: innodb_file_per_table=1 #重启 mysql shawn@Shawn:~$ sudo /etc/init.d/mysql restart
At this time, if you partition InooDB, the following effects will occur:
8768 Jun 7 22:54 employees.frm 48 Jun 7 22:54 employees.par 98304 Jun 7 22:54 employees#P#pCentral.ibd 98304 Jun 7 22:54 employees#P#pEast.ibd 98304 Jun 7 22:54 employees#P#pNorth.ibd 98304 Jun 7 22:54 employees#P#pWest.ibd
Partition Management
Delete Partition
mysql> alter table employees drop partition pWest;
New partition
#range添加新分区 mysql> alter table employees add partition ( partition p4 values less than (26) ); #list添加新分区 mysql> alter table employees add partition( partition pSouth values in (21, 22, 23) ); #hash重新分区 mysql> alter table employees add partition partitions 5;
The above is the detailed content of A brief analysis of code examples of MySQL-data table partitioning technology PARTITION. For more information, please follow other related articles on the PHP Chinese website!

MySQL index cardinality has a significant impact on query performance: 1. High cardinality index can more effectively narrow the data range and improve query efficiency; 2. Low cardinality index may lead to full table scanning and reduce query performance; 3. In joint index, high cardinality sequences should be placed in front to optimize query.

The MySQL learning path includes basic knowledge, core concepts, usage examples, and optimization techniques. 1) Understand basic concepts such as tables, rows, columns, and SQL queries. 2) Learn the definition, working principles and advantages of MySQL. 3) Master basic CRUD operations and advanced usage, such as indexes and stored procedures. 4) Familiar with common error debugging and performance optimization suggestions, such as rational use of indexes and optimization queries. Through these steps, you will have a full grasp of the use and optimization of MySQL.

MySQL's real-world applications include basic database design and complex query optimization. 1) Basic usage: used to store and manage user data, such as inserting, querying, updating and deleting user information. 2) Advanced usage: Handle complex business logic, such as order and inventory management of e-commerce platforms. 3) Performance optimization: Improve performance by rationally using indexes, partition tables and query caches.

SQL commands in MySQL can be divided into categories such as DDL, DML, DQL, DCL, etc., and are used to create, modify, delete databases and tables, insert, update, delete data, and perform complex query operations. 1. Basic usage includes CREATETABLE creation table, INSERTINTO insert data, and SELECT query data. 2. Advanced usage involves JOIN for table joins, subqueries and GROUPBY for data aggregation. 3. Common errors such as syntax errors, data type mismatch and permission problems can be debugged through syntax checking, data type conversion and permission management. 4. Performance optimization suggestions include using indexes, avoiding full table scanning, optimizing JOIN operations and using transactions to ensure data consistency.

InnoDB achieves atomicity through undolog, consistency and isolation through locking mechanism and MVCC, and persistence through redolog. 1) Atomicity: Use undolog to record the original data to ensure that the transaction can be rolled back. 2) Consistency: Ensure the data consistency through row-level locking and MVCC. 3) Isolation: Supports multiple isolation levels, and REPEATABLEREAD is used by default. 4) Persistence: Use redolog to record modifications to ensure that data is saved for a long time.

MySQL's position in databases and programming is very important. It is an open source relational database management system that is widely used in various application scenarios. 1) MySQL provides efficient data storage, organization and retrieval functions, supporting Web, mobile and enterprise-level systems. 2) It uses a client-server architecture, supports multiple storage engines and index optimization. 3) Basic usages include creating tables and inserting data, and advanced usages involve multi-table JOINs and complex queries. 4) Frequently asked questions such as SQL syntax errors and performance issues can be debugged through the EXPLAIN command and slow query log. 5) Performance optimization methods include rational use of indexes, optimized query and use of caches. Best practices include using transactions and PreparedStatemen

MySQL is suitable for small and large enterprises. 1) Small businesses can use MySQL for basic data management, such as storing customer information. 2) Large enterprises can use MySQL to process massive data and complex business logic to optimize query performance and transaction processing.

InnoDB effectively prevents phantom reading through Next-KeyLocking mechanism. 1) Next-KeyLocking combines row lock and gap lock to lock records and their gaps to prevent new records from being inserted. 2) In practical applications, by optimizing query and adjusting isolation levels, lock competition can be reduced and concurrency performance can be improved.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

PhpStorm Mac version
The latest (2018.2.1) professional PHP integrated development tool

Zend Studio 13.0.1
Powerful PHP integrated development environment

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

SublimeText3 Mac version
God-level code editing software (SublimeText3)

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft