


What is the difference between mysql clustered index and non-clustered index
Difference: 1. The clustered index stores the data in the table in the leaf nodes, while the non-clustered index stores the primary key and index column in the leaf nodes; 2. The order and index of the table records in the clustered index The sorting order is consistent, but the sorting order of non-clustered indexes is inconsistent; 3. Each table can only have one clustered index, but there can be multiple non-clustered indexes.
The operating environment of this tutorial: windows7 system, mysql8 version, Dell G3 computer.
The indexes of MySQL's Innodb storage engine are divided into two categories: clustered indexes and non-clustered indexes. You can understand clustered indexes and non-clustered indexes by comparing the indexes of the Chinese dictionary. The Chinese dictionary provides two ways of retrieving Chinese characters. The first is pinyin retrieval (provided that the pronunciation of the Chinese character is known). For example, the Chinese character with the pinyin of cheng is ranked after the Chinese character with the pinyin of chang. The page number of the corresponding Chinese character is found based on the pinyin (because pressing Pinyin sorting, binary search can quickly locate), this is what we usually call dictionary order; the second type is radical stroke retrieval, find the corresponding Chinese characters according to the strokes, and find the page number corresponding to the Chinese character. Pinyin retrieval is a clustered index, because the stored records (row data in the database, detailed records of Chinese characters in the dictionary) are sorted according to this index; stroke index, although words with the same strokes are adjacent in the stroke index, the actual storage The page numbers are not adjacent, this is a non-clustered index.
Clustered Index
The logical order of the key values in the index determines the physical order of the corresponding rows in the table.
Clustered index determines the physical order of data in the table. A clustered index is similar to a phone book in that the data is arranged by last name. Clustered indexes are particularly effective for columns where range values are often searched. Once you use a clustered index to find the row containing the first value, you can ensure that rows containing subsequent index values are physically adjacent. For example, if your application performs a query that frequently retrieves records within a certain date range, you can use a clustered index to quickly find the row containing the start date and then retrieve all adjacent rows in the table until the end date is reached. This helps improve the performance of such queries. Likewise, if a column is frequently used when sorting data retrieved from a table, the table can be clustered (physically sorted) on that column to save costs by not having to sort it each time that column is queried.
The above is the b tree index structure of innodb
We know that b tree evolved from b-tree, an m-order B-Tree It has the following characteristics:
1. Each node can have up to m child nodes.
2. Except for the root node and leaf nodes, each node has at least m/2 (rounded up) child nodes.
3. If the root node is not a leaf node, the root node contains at least two child nodes.
4. All leaf nodes are located on the same layer.
5. Each node contains k elements (keywords), where m/2≤k6. The elements (keywords) in each node are arranged from small to large.
7. The value of the left node of each element (keyword) is less than or equal to the element (keyword). The values of the right node are greater than or equal to the element (keyword).
b The characteristics of tree are:
1. All non-leaf nodes only store keyword information.
2. All satellite data (specific data) are stored in leaf nodes.
3. All leaf nodes contain information about all elements.
4. There is a link pointer between all leaf nodes.
We found that b trre has the following characteristics:
- is particularly effective and fast for queries within a range (through the leaf chain pointer);
- is particularly effective for specific queries Key value query is only slightly less efficient than b-tree (because it has to go to the leaf level), but it can also be ignored;
Non-clustered index
Index The logical order of the indexes in the disk is different from the physical storage order of the rows on disk.
In fact, according to the definition, indexes other than clustered indexes are non-clustered indexes, but people want to subdivide non-clustered indexes into ordinary indexes, unique indexes, and full-text indexes. If we have to compare the non-clustered index to something in real life, then the non-clustered index is like the radical dictionary of Xinhua Dictionary, and its structural order is not necessarily consistent with the actual storage order.
The storage structure of the non-clustered index is the same as before. The difference is that the data part of the leaf node no longer stores specific data, but the aggregation of data The key of the index. Therefore, the process of searching through a non-clustered index is to first find the key of the clustered index corresponding to the index key, and then use the key of the clustered index to find the corresponding data on the primary key index tree. This process is called table return !
Give an example:
create table student ( `id` INT UNSIGNED AUTO_INCREMENT, `username` VARCHAR(255), `score` INT, PRIMARY KEY(`id`), KEY(`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Clustered index clustered index(id), non-clustered index index(username).
使用以下语句进行查询,不需要进行二次查询,直接就可以从非聚集索引的节点里面就可以获取到查询列的数据。
select id, username from t1 where username = '小明' select username from t1 where username = '小明'
但是使用以下语句进行查询,就需要二次的查询去获取原数据行的score:
select username, score from t1 where username = '小明'
聚集索引和非聚集索引区别
区别一:
聚集索引:就是以主键创建的索引,在叶子节点存储的是表中的数据
非聚集索引:就是以非主键创建的索引(也叫做二级索引),在叶子节点存储的是主键和索引列。
区别二:
聚集索引中表记录的排列顺序和索引的排列顺序一致;所以查询效率快,因为只要找到第一个索引值记录,其余的连续性的记录在物理表中也会连续存放,一起就可以查询到。缺点:新增比较慢,因为为了保证表中记录的物理顺序和索引顺序一致,在记录插入的时候,会对数据页重新排序。
非聚集索引中表记录的排列顺序和索引的排列顺序不一致。
区别三:
聚集索引是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储不连续。
区别四:
聚集索引每张表只能有一个,非聚集索引可以有多个。
【相关推荐:mysql视频教程】
The above is the detailed content of What is the difference between mysql clustered index and non-clustered index. For more information, please follow other related articles on the PHP Chinese website!

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

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

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

Hot Topics



MySQL is suitable for beginners because it is simple to install, powerful and easy to manage data. 1. Simple installation and configuration, suitable for a variety of operating systems. 2. Support basic operations such as creating databases and tables, inserting, querying, updating and deleting data. 3. Provide advanced functions such as JOIN operations and subqueries. 4. Performance can be improved through indexing, query optimization and table partitioning. 5. Support backup, recovery and security measures to ensure data security and consistency.

MySQL is an open source relational database management system. 1) Create database and tables: Use the CREATEDATABASE and CREATETABLE commands. 2) Basic operations: INSERT, UPDATE, DELETE and SELECT. 3) Advanced operations: JOIN, subquery and transaction processing. 4) Debugging skills: Check syntax, data type and permissions. 5) Optimization suggestions: Use indexes, avoid SELECT* and use transactions.

Create a database using Navicat Premium: Connect to the database server and enter the connection parameters. Right-click on the server and select Create Database. Enter the name of the new database and the specified character set and collation. Connect to the new database and create the table in the Object Browser. Right-click on the table and select Insert Data to insert the data.

You can open phpMyAdmin through the following steps: 1. Log in to the website control panel; 2. Find and click the phpMyAdmin icon; 3. Enter MySQL credentials; 4. Click "Login".

MySQL and SQL are essential skills for developers. 1.MySQL is an open source relational database management system, and SQL is the standard language used to manage and operate databases. 2.MySQL supports multiple storage engines through efficient data storage and retrieval functions, and SQL completes complex data operations through simple statements. 3. Examples of usage include basic queries and advanced queries, such as filtering and sorting by condition. 4. Common errors include syntax errors and performance issues, which can be optimized by checking SQL statements and using EXPLAIN commands. 5. Performance optimization techniques include using indexes, avoiding full table scanning, optimizing JOIN operations and improving code readability.

You can create a new MySQL connection in Navicat by following the steps: Open the application and select New Connection (Ctrl N). Select "MySQL" as the connection type. Enter the hostname/IP address, port, username, and password. (Optional) Configure advanced options. Save the connection and enter the connection name.

Steps to perform SQL in Navicat: Connect to the database. Create a SQL Editor window. Write SQL queries or scripts. Click the Run button to execute a query or script. View the results (if the query is executed).

Common errors and solutions when connecting to databases: Username or password (Error 1045) Firewall blocks connection (Error 2003) Connection timeout (Error 10060) Unable to use socket connection (Error 1042) SSL connection error (Error 10055) Too many connection attempts result in the host being blocked (Error 1129) Database does not exist (Error 1049) No permission to connect to database (Error 1000)
