分别给xc表添加ind_name和ind_status的索引:
root@test 11:44:13>create index ind_name on xc(name);
Query OK, 6815744 rows affected (1 min 43.75 sec)
Records: 6815744 Duplicates: 0 Warnings: 0
root@test 01:53:31>create index ind_status on xc(status);
Query OK, 6815744 rows affected (2 min 4.26 sec)
Records: 6815744 Duplicates: 0 Warnings: 0
root@test 11:15:47>alter table xc add index ind_name(name);
Query OK, 6815744 rows affected (1 min 44.40 sec)
Records: 6815744 Duplicates: 0 Warnings: 0
root@test 11:20:01>alter table xc add index ind_status(status);
Query OK, 6815744 rows affected (2 min 11.50 sec)
Records: 6815744 Duplicates: 0 Warnings: 0
共:3 min 55.90 sec
将两个ddl语句合并起来的添加或删除索引:
root@test 11:32:18>alter table xc add index ind_name(name),add index ind_status(status);
Query OK, 6815744 rows affected (1 min 58.07 sec)
Records: 6815744 Duplicates: 0 Warnings: 0
root@test 11:40:34>alter table xc drop index ind_name,drop index ind_status;
Query OK, 6815744 rows affected (1 min 28.48 sec)
Records: 6815744 Duplicates: 0 Warnings: 0
可以看到在添加或者删除secondary index的时候,合并为一个子句的和分开写的ddl语句的执行时间差不多为两倍!
原因在于:添加index的时候,innodb扫描原表,在内存或者临时文件中对行进行排序!
然而,合起来的ddl语句只要对原表扫描一次完成操作,分开写的ddl语句需要完成两次扫描操作。在对大表进行索引的添加和删除的时候,这种方法屡试不爽。
来源:http://hidba.org/?p=129
分享到:
相关推荐
当在查询中对联合索引的第一个字段使用范围条件时,如`name > 'LiLei'`,MySQL可能会选择不使用该索引,因为它认为范围查询会导致大量行被扫描,导致回表操作效率低下,因此可能选择全表扫描。这可以通过`EXPLAIN`...
单值索引是一个索引只包含单个列,一个表可以有多个单值索引。复合索引是一个索引包含多个列。 在实际应用中,索引可以大大提高查询速度,但也需要注意索引的劣势。在创建索引时需要考虑索引的优点和劣势,选择合适...
例如,索引合并策略可以在多个索引中同时查找所需数据,而覆盖索引可以减少数据访问量,提升查询效率。 在实际操作中,数据库管理员需要根据具体的业务场景、查询类型和数据分布来制定相应的索引优化策略。例如,...
根据描述中的测试例子,我们可以得知MySQL的一个索引最多可以包含16个列。 创建索引的语法通常如下: ```sql CREATE INDEX index_name ON table_name (column1, column2, ..., columnN); ``` 在提供的测试中,...
简单索引针对单个字段,而组合索引则是针对多个字段,允许在多个字段上设置索引以优化复合条件的查询。例如,`SHOW INDEXES FROM students;`命令可以用来查看`students`表的所有索引信息。查询速度可能会受到缓存的...
Python-mysqldiff是一款专为数据库管理设计的轻量级工具,主要功能是对比不同版本的MySQL数据库,并生成相应的SQL脚本以实现...对于从事Python开发且需要管理多个MySQL数据库的团队来说,这是一款不可多得的利器。
【LoadRunner测试MySQL脚本】是使用HP的LoadRunner工具对MySQL数据库进行性能测试的一种方法。LoadRunner是一款功能强大的性能测试工具,它可以帮助我们评估和优化应用程序在高负载下的表现,确保系统的稳定性和可靠...
这会启动一个模拟多个客户端的进程,执行TPC-C标准的事务。 3. **监控和记录**:在测试过程中,你可以使用MySQL的监控工具,如`SHOW STATUS`命令或`performance_schema`,来查看数据库的运行状态。同时,TPCC-Mysql...
总结起来,使用shell脚本为MySQL添加索引是一种批量操作的有效方法,尤其在处理多个类似表时。这种方法减少了手动编写和执行大量SQL命令的繁琐工作,提高了效率。然而,需要注意的是,创建索引会占用额外的存储空间...
当你执行这个脚本时,会在MySQL数据库中创建一个或多个表,并填充大约三十万条数据。这种规模的数据量对于学习和实践SQL查询优化是相当合适的,因为可以模拟真实世界的大型数据集。 接着,我们看到一系列以 `load_`...
MySQL TPCH测试工具是用于评估决策支持系统(DSS)在商业分析中OLAP(在线分析处理)性能的一个标准工具包。这个工具由TPC(Transaction Processing Performance Council)组织提供,它包含一系列针对商业的ad-hoc查询和...
MySQL技能测试题目中包含了多个知识点,下面我将对这些知识点进行详细的说明。 1. MySQL的定义和理解 MySQL是一个流行的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现属于甲骨文公司。它使用结构化...
如果一列中大多数行的值都不同,那么这个索引在查询时将更有效。例如,在一个包含身份证号的列上创建索引通常比在一个性别列上创建索引效果更好,因为身份证号的重复率远低于性别。在`test_t`表的`num`和`d_num`列上...
如果你试图引用的其中一个外键没有建立索引,或者不是一个 primary key,那么你必须为它创建一个索引。否则,Error 150 将会出现。 3. 外键名字已经存在 外键的名字是一个已经存在的一个键值了,这个时候,你应该...
还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引。 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条...
5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...
5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 ...
在MySQL数据库中,分区是一种优化策略,它将大型表的数据分成多个较小、更易管理的部分,每个部分(即分区)通常包含相似或相关的数据。分区字段是决定数据存储在哪个分区的关键因素,而索引则是提高查询性能的重要...