mysql中的索引和分区

简介: 在MySQL中,索引和分区是提高查询效率的关键技术。通过创建合适的索引,可以显著提升数据检索速度。而分区可以作为作为进一步提高查询效率的方式,在较大数据量时通常可以使用这两个结合的方式优化查询速度,所以这边将这两个进行整理,巩固个人知识,同时也希望帮助到有需要的朋友。

 目录

1.编写目的

2.索引

2.1 创建方法

2.2 最佳适用

2.3 索引相关语句

3.分区

3.1 创建方法

3.2 最佳适用


Welcome to Code Block's blog

本篇文章主要介绍了

[Mysql中的分区和索引]

❤博主广交技术好友,喜欢文章的可以关注一下❤

1.编写目的

       在MySQL中,索引和分区是提高查询效率的关键技术。通过创建合适的索引,可以显著提升数据检索速度。而分区可以作为作为进一步提高查询效率的方式,在较大数量据时通常可以使用这两个结合的方式优化查询速度,所以这边将这两个进行整理,巩固个人知识,同时也希望帮助到有需要的朋友。

2.索引

       索引分为单列索引、多列索引、唯一索引、全文索引.

2.1 创建方法

单列索引

CREATE INDEX {索引名} ON {表名} ({列名});

image.gif

多列索引

CREATE INDEX {索引名} ON {表名} ({列名1}, {列名2});

image.gif

唯一索引

CREATE UNIQUE INDEX {索引名} ON {表名} ({列名});

image.gif

全文索引

CREATE FULLTEXT INDEX {索引名} ON {表名} ({列名});

image.gif

2.2 最佳适用

       索引不能随意创建,需要选择合适的列,我们应选择常用的查询条件列(即字段在where经常使用的列作为索引)、JOIN 操作列(做左外、右外、全连接时的列)、排序列(作为排序使用的列),频繁更新列应避免添加索引影响性能,同时避免创建过多的索引.若不需要进行全文搜索操作则尽力避免使用全文索引.

2.3 索引相关语句

查询表内索引

SHOW INDEX FROM {表名};

image.gif

查看查询性能

EXPLAIN SELECT * FROM {表名} WHERE {索引字段} = {值};

image.gif

删除索引

ALTER TABLE {表名} DROP INDEX {索引名};

image.gif

3.分区

分区根据基于不同的属性进行分区可分为以下几种:

  • RANGE 分区:基于值的范围进行分区
  • LIST 分区:基于值的列表进行分区
  • HASH 分区:基于哈希值进行分区
  • KEY 分区:基于列的键值进行分区

3.1 创建方法

基本语法

CREATE TABLE {表名} (
    id INT AUTO_INCREMENT PRIMARY KEY,
    column1 datatype,
    column2 datatype,
    ...
)
PARTITION BY {分区类型} ({列名});

image.gif

RANGE分区

适用于时间范围的分区,可以进行按年份分区:

CREATE TABLE orders (
    id INT AUTO_INCREMENT,
    order_date DATE,
    amount DECIMAL(10, 2),
    PRIMARY KEY (id, order_date)
)
PARTITION BY RANGE (YEAR(order_date)) (
    PARTITION p2020 VALUES LESS THAN (2021),
    PARTITION p2021 VALUES LESS THAN (2022),
    PARTITION p2022 VALUES LESS THAN (2023)
);

image.gif

LIST 分区

适用于特定值的分区,可进行按国家、省市区进行分区,如下按国家分区:

CREATE TABLE employees (
    id INT AUTO_INCREMENT,
    name VARCHAR(100),
    country VARCHAR(50),
    PRIMARY KEY (id, country)
)
PARTITION BY LIST (country) (
    PARTITION p_us VALUES IN ('USA'),
    PARTITION p_uk VALUES IN ('UK'),
    PARTITION p_ca VALUES IN ('Canada')
);

image.gif

HASH 分区

根据不同字段组成的hash值字段进行分区:

CREATE TABLE products (
    id INT AUTO_INCREMENT,
    product_name VARCHAR(100),
    category_id INT,
    PRIMARY KEY (id, category_id)
)
PARTITION BY HASH (category_id) PARTITIONS 4;

image.gif

KEY 分区

根据多个字段进行分区,这类似于根据hash值分区

CREATE TABLE sales (
    id INT AUTO_INCREMENT,
    product_id INT,
    sale_date DATE,
    amount DECIMAL(10, 2),
    PRIMARY KEY (id, product_id)
)
PARTITION BY KEY (product_id) PARTITIONS 5;

image.gif

3.2 最佳适用

       在分区时应尽量选择合适的分区类型、分区数量,避免频繁修改分区键的值,进行分区后应使用EXPLAIN分析查询.

       如:当我们创建不同区域拥有不同权限的系统时,我们可以使用LIST分区,或者根据区域字段进行hash生成额外字段,并使用hash分区.或者直接使用key分区的方式对区域列进行分区.这样可以有效提升不同区域用户查询速度.

感谢您的关注和收藏!!!!!!

image.gif 编辑


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 关系型数据库 MySQL
【mysql】MySQL 分区快速入门
【mysql】MySQL 分区快速入门
272 0
|
4月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
614 5
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
1043 0
|
SQL 监控 关系型数据库
MySQL如何查看每个分区的数据量
通过本文的介绍,您可以使用MySQL的 `INFORMATION_SCHEMA`查询每个分区的数据量。了解分区数据量对数据库优化和管理具有重要意义,可以帮助您优化查询性能、平衡数据负载和监控数据库健康状况。希望本文对您在MySQL分区管理和性能优化方面有所帮助。
1142 1
|
存储 关系型数据库 MySQL
MySQL 如何查看每个分区的数据量
MySQL 如何查看每个分区的数据量
930 3
|
关系型数据库 MySQL 大数据
MySQL分区与分表:优化性能与提升可扩展性
本文深入探讨了MySQL数据库中的分区与分表策略,通过详细的代码示例,解释了分区的概念与用途、不同的分区类型以及创建分区表的步骤。同时,文章还介绍了分表的概念、策略和实际操作方法,以代码演示展示了如何创建分表、插入数据以及查询数据。分区和分表作为优化数据库性能和提升可扩展性的关键手段,通过本文的阐述,读者将能够深入了解如何根据数据特点选择合适的分区方式,以及如何灵活地处理大量数据,提高查询和维护效率。这些技术将为数据库设计和优化提供有力支持,确保在大数据场景下能够高效地管理和查询数据。
2750 0
|
传感器 关系型数据库 MySQL
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
php语句:MySQL指定分区表跨分区根据时间条件快速查询记录的封装函数
243 0
|
关系型数据库 MySQL
Mysql 表分区创建方法
Mysql 表分区创建方法
|
DataWorks 安全 关系型数据库
DataWorks产品使用合集之如何实现MySQL数据库的自动分区
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
分布式计算 DataWorks 关系型数据库
DataWorks产品使用合集之当需要将数据从ODPS同步到RDS,且ODPS表是二级分区表时,如何同步所有二级分区的数据
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
310 7

推荐镜像

更多