Home Database Mysql Tutorial B-Tree索引在sqlserver和mysql中的应用

B-Tree索引在sqlserver和mysql中的应用

Jun 07, 2016 pm 03:51 PM
B-Tree mysql sqlserver index

在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实没有真正理解索引,并没有搞清楚索引为什么能加快检索速度,以至于在实践中并不能很好的应用索引。 事实上,索引可以说是最廉价而且十分有效一种优化手段,一般而言,设计优良的索引对查询性

在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实没有真正理解索引,并没有搞清楚索引为什么能加快检索速度,以至于在实践中并不能很好的应用索引。

事实上,索引可以说是最廉价而且十分有效一种优化手段,一般而言,设计优良的索引对查询性能优化确实能起到立竿见影的效果。


相信很多读者,都了解和使用过索引,可能也看过或者听过”新华字典“、”图书馆“之类比较通俗描述,但是对索引的存储结构和本质任然还比较迷茫。

有数据结构和算法基础的读者,应该都听过或者实践过“顺序查找,二分查找(折半)查找,二叉树查找”这几种很常见的查找算法。其中,顺序查找效率是最低的,其算法复杂度为O(n),而二分查找算法复杂度为O(logn)但要求数据是必须为有序的,通常在链表中使用广泛。而二叉树查找的复杂度仅为O(log2n),但要求数据结构为“树”。

B-Tree索引在sqlserver和mysql中的应用

B-Tree索引在sqlserver和mysql中的应用

在主流的关系型数据库中,使用和支持最广泛的要属B-Tree索引。考虑到大部分读者数据结构知识有限,为了便于理解,读者可以把B-Tree(或者其变种B+Tree)

理解为常见的二叉树。虽然这并不精确,但是相信读者看了之后,已经大致明白了为什么通过索引查找数据会比普通的表扫描会快很多。


sqlserver中的聚集索引

B-Tree索引在sqlserver和mysql中的应用

聚集索引的叶子节点(最底下的节点)直接包含了数据页。


sqlserver中的非聚集索引

B-Tree索引在sqlserver和mysql中的应用

在有聚集索引的表中,非聚集索引的叶子节点,包含的是聚集索引的键值(可以理解为聚集索引的指针)。

在没有聚集索引的堆表中,非聚集索引包含的是RID(可以理解为数据行的指针)。


在mysql中,通常也有“聚集索引”(针对InnoDB引擎)和“非聚集索引”(针对MyIsam引擎),“主键索引"和”二级索引“。

mysql InnoDB引擎中的索引结构

B-Tree索引在sqlserver和mysql中的应用

在主键索引中,叶子节点包含了数据行(数据页),二级索引的叶子界面,存放的是主键索引的键值(指向的主键索引)


mysql MyIsam引擎中的索引结构


B-Tree索引在sqlserver和mysql中的应用

主键索引与二级索引结构上没有太大的区别,叶子节点都保存的数据行信息(例如row number等)可以直接指向并定位到数据行


相信读者不难看出,B-Tree索引在sqlserver和mysql中的结构、存储方式、原理都是大致相同的。当然,也有很多细节和内部实现上的差异。


限于笔者水平和理解有限,文中全部文字和描述等全凭笔者记忆写出,难免出现错误,敬请热心的读者及时批评和指正。

由于时间有限,大部分图片笔者画的比较粗糙,也请读者谅解。


http://blog.csdn.net/dinglang_2009





Statement of this Website
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

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 Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

MySQL's Role: Databases in Web Applications MySQL's Role: Databases in Web Applications Apr 17, 2025 am 12:23 AM

The main role of MySQL in web applications is to store and manage data. 1.MySQL efficiently processes user information, product catalogs, transaction records and other data. 2. Through SQL query, developers can extract information from the database to generate dynamic content. 3.MySQL works based on the client-server model to ensure acceptable query speed.

Laravel Introduction Example Laravel Introduction Example Apr 18, 2025 pm 12:45 PM

Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

How to start mysql by docker How to start mysql by docker Apr 15, 2025 pm 12:09 PM

The process of starting MySQL in Docker consists of the following steps: Pull the MySQL image to create and start the container, set the root user password, and map the port verification connection Create the database and the user grants all permissions to the database

Solve database connection problem: a practical case of using minii/db library Solve database connection problem: a practical case of using minii/db library Apr 18, 2025 am 07:09 AM

I encountered a tricky problem when developing a small application: the need to quickly integrate a lightweight database operation library. After trying multiple libraries, I found that they either have too much functionality or are not very compatible. Eventually, I found minii/db, a simplified version based on Yii2 that solved my problem perfectly.

How to install mysql in centos7 How to install mysql in centos7 Apr 14, 2025 pm 08:30 PM

The key to installing MySQL elegantly is to add the official MySQL repository. The specific steps are as follows: Download the MySQL official GPG key to prevent phishing attacks. Add MySQL repository file: rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm Update yum repository cache: yum update installation MySQL: yum install mysql-server startup MySQL service: systemctl start mysqld set up booting

Centos install mysql Centos install mysql Apr 14, 2025 pm 08:09 PM

Installing MySQL on CentOS involves the following steps: Adding the appropriate MySQL yum source. Execute the yum install mysql-server command to install the MySQL server. Use the mysql_secure_installation command to make security settings, such as setting the root user password. Customize the MySQL configuration file as needed. Tune MySQL parameters and optimize databases for performance.

Laravel framework installation method Laravel framework installation method Apr 18, 2025 pm 12:54 PM

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

MySQL and phpMyAdmin: Core Features and Functions MySQL and phpMyAdmin: Core Features and Functions Apr 22, 2025 am 12:12 AM

MySQL and phpMyAdmin are powerful database management tools. 1) MySQL is used to create databases and tables, and to execute DML and SQL queries. 2) phpMyAdmin provides an intuitive interface for database management, table structure management, data operations and user permission management.

See all articles