• 在MySQL中添加索引


    在添加之前可以做下备份

    mysqldump -u 用户名 -p 数据库名 表名 > 备份文件.sql
    

    在 MySQL 中,虽然可以同时执行多个 ALTER TABLE 语句,但需要注意的是,MySQL 对 ALTER TABLE 操作的并行执行有一些限制。具体来说,MySQL 在执行 ALTER TABLE 操作时会对表进行锁定(通常是表级锁),这意味着对于同一个表的多个 ALTER TABLE 操作无法同时进行。然而,对于不同的表,可以并行执行这些操作。

    同时对多个表添加索引

    如果要对不同的表添加索引,这些操作可以同时进行,因为每个表的 ALTER TABLE 操作是独立的。例如:

    ALTER TABLE orders ADD INDEX idx_order_date (order_date);
    ALTER TABLE customers ADD INDEX idx_email (email);
    ALTER TABLE products ADD INDEX idx_category_id (category_id);
    ALTER TABLE products ADD INDEX idx_price (price);
    ALTER TABLE products ADD INDEX idx_stock_quantity (stock_quantity);
    

    可以在多个数据库连接中分别执行上述命令,以实现并行操作。

    同时对同一个表添加多个索引

    对于同一个表,虽然不能在同一时间并行执行多个 ALTER TABLE 语句,但可以在一个 ALTER TABLE 语句中添加多个索引。这是一种更高效的方法,因为它只需要一次表锁定和数据扫描。

    示例:在一个操作中为 products 表添加多个索引
    ALTER TABLE products 
    ADD INDEX idx_category_id (category_id), 
    ADD INDEX idx_price (price), 
    ADD INDEX idx_stock_quantity (stock_quantity);
    

    使用多线程并行执行

    如果你使用的是 MySQL 8.0 或更高版本,可以利用 MySQL 的并行执行能力,特别是对于大表和复杂的索引操作,这可能会有显著的性能提升。

    使用脚本并行执行

    如果你希望利用多核 CPU 的优势来并行处理多个 ALTER TABLE 操作,可以编写一个脚本(如 shell 脚本)来在多个 MySQL 会话中并行执行这些命令。

    示例:Shell 脚本并行执行

    以下是一个简单的 bash 脚本示例,用于并行执行 ALTER TABLE 命令:

    #!/bin/bash
    
    # MySQL 用户名和密码
    USER="root"
    PASSWORD="password"
    DATABASE="aaa"
    
    # 在后台执行 ALTER TABLE 命令
    mysql -u ${USER} -p${PASSWORD} -e "ALTER TABLE orders ADD INDEX idx_order_date (order_date);" ${DATABASE} &
    mysql -u ${USER} -p${PASSWORD} -e "ALTER TABLE customers ADD INDEX idx_email (email);" ${DATABASE} &
    mysql -u ${USER} -p${PASSWORD} -e "ALTER TABLE products ADD INDEX idx_category_id (category_id);" ${DATABASE} &
    mysql -u ${USER} -p${PASSWORD} -e "ALTER TABLE products ADD INDEX idx_price (price);" ${DATABASE} &
    mysql -u ${USER} -p${PASSWORD} -e "ALTER TABLE products ADD INDEX idx_stock_quantity (stock_quantity);" ${DATABASE} &
    
    # 等待所有后台任务完成
    wait
    
    echo "所有索引添加操作已完成"
    

    执行脚本说明

    1. mysql -u ${USER} -p${PASSWORD} -e:在 MySQL 中执行 SQL 语句的命令。
    2. &:将命令放入后台执行,以实现并行处理。
    3. wait:等待所有后台任务完成。

    注意事项

    • 系统资源:并行执行多个 ALTER TABLE 操作会消耗更多的系统资源(CPU、内存和磁盘I/O),需要确保服务器有足够的资源支持并行操作。
    • 事务和锁定:对于涉及大量数据修改的操作,应考虑使用事务和适当的锁定策略,确保数据一致性。
    • 备份和恢复:在进行大规模索引操作之前,建议先备份数据,以防操作过程中出现问题。

    总结

    虽然 MySQL 对同一个表的 ALTER TABLE 操作有锁定限制,但可以通过在同一个 ALTER TABLE 命令中添加多个索引,或在不同表上并行执行 ALTER TABLE 操作来提高效率。此外,利用脚本和多线程技术,可以更好地管理和优化这些并行操作。

  • 相关阅读:
    【LeetCode每日一题:1758. 生成交替二进制字符串的最少操作数~~~模拟+遍历+计数】
    CSS:结构伪类选择器(选择子元素)、伪元素、标准流、浮动、清除浮动
    元宇宙广告 模式与机遇
    记录一个ABB机器人RobotStudio软件智能组件的神奇地方(走进科学来了都得拍三天)
    Docker容器互联
    ArcGIS 高级制图技巧:1、制图表达轮廓线
    Vue基本介绍、声明式渲染、组件化、MVVM模式及Vue为什么要使用虚拟Dom
    Rviz插件分析(status_panel)
    dev-server是怎么跑起来?
    【代码审计】——PHP项目类RCE及文件包含下载删除
  • 原文地址:https://blog.csdn.net/u011197085/article/details/139808047