当前位置: 首页 > news >正文

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 {表名} ({列名});

多列索引

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

唯一索引

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

全文索引 

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

2.2 最佳适用

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

2.3 索引相关语句

查询表内索引

SHOW INDEX FROM {表名};

 查看查询性能

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

删除索引

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

3.分区

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

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

3.1 创建方法

基本语法

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

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)
);

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')
);

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;

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;

3.2 最佳适用

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

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

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

http://www.lryc.cn/news/405073.html

相关文章:

  • 项目实战--C#实现图书馆信息管理系统
  • 信号【Linux】
  • Kafka Producer之ACKS应答机制
  • 【深入理解SpringCloud微服务】深入理解Eureka核心原理
  • 算法——滑动窗口(day7)
  • Django学习第一天(如何创建和运行app)
  • VScode连接虚拟机运行Python文件的方法
  • 通义千问AI模型对接飞书机器人-模型配置(2-1)
  • [k8s源码]6.reflector
  • 前台文本直接取数据库值doFieldSQL插入SQL
  • 【06】LLaMA-Factory微调大模型——微调模型评估
  • 数学建模学习(1)遗传算法
  • NumPy冷知识66个
  • Wi-SUN无线通信技术 — 大规模分散式物联网应用首选
  • 在 Ubuntu Server 22.04 上安装 Docker 的详细步骤
  • 前端使用 Konva 实现可视化设计器(18)- 素材嵌套 - 加载阶段
  • vue3 -layui项目-左侧导航菜单栏
  • Spring AOP(1)
  • 第1关 -- Linux 基础知识
  • tensorflow keras Model.fit returning: ValueError: Unrecognized data type
  • 虚拟机固定配置IP
  • 【Pytorch实用教程】pytorch中random_split用法的详细介绍
  • 第二讲:NJ网络配置
  • pytorch中常见的模型3种组织方式 nn.Sequential(OrderedDict)
  • 达梦数据库DM8-索引篇
  • 【中项】系统集成项目管理工程师-第4章 信息系统架构-4.5技术架构
  • 随机梯度下降 (Stochastic Gradient Descent, SGD)
  • TDengine 3.3.2.0 发布:新增 UDT 及 Oracle、SQL Server 数据接入
  • Ubuntu 24.04 LTS 无法打开Chrome浏览器
  • linux中RocketMQ安装(单机版)及springboot中的使用