`
buliedian
  • 浏览: 1238409 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

千万级别数据表,单列索引和多列索引性能对比

 
阅读更多

由于Contact表存在多个(单列)索引,造成Delete update insert操作时需要花费大量的时间删除索引和重建索引。

通过把多个(单列)索引合并成一个(多列)索引后,测试得出Delete update insert操作时需要花费的时间大大缩短。

由于多个(单列)索引合并成一个(多列)索引,可能会对之前单列索引字段的查询性能有影响,做了对比测试。结果如下

测试

Sql语句

查询结果行数

多个(单列)索引运行时间

单个(多列)索引运行时间

结论

删除一天数据

Declare @minCreatedDate Datetime Set @minCreatedDate= Convert(DateTime,'2010-4-25 00:00:00',120)

DELETE from u_ch_Contact where CreatedDate between @minCreatedDate and dateadd(day,1,@minCreatedDate);

40822

SQL Server Execution Times:

CPU time = 17031 ms, elapsed time = 633199 ms.

001034

SQL Server Execution Times:

CPU time = 10405 ms, elapsed time = 39571 ms.

000039

单个(多列)索引明显比多个(单列)索引Del数据时花费的时间要短很多。

CustomerID(单列)索引和(多列)索引下查询性能对比

SELECT * FROM u_ch_contact WHERE CustomerId='F9F268C1-A234-4716-9FC8-00022B2DE8E4'

42

SQL Server Execution Times:

CPU time = 0 ms, elapsed time = 1345 ms.

000001

SQL Server Execution Times:

CPU time = 31049 ms, elapsed time = 21414 ms.

000021

(单列)索引比(多列)索引在查询数据花费时间要短很多,主要表现在(单列)索引用的是索引查找,(多列)索引用的是索引扫描

CreatedBy(单列)索引和(多列)索引下查询性能对比

SELECT * FROM u_ch_contact WHERE CreatedBy='B8056067-5DBA-41A0-B6CB-01CDFBAC517E'

19099

SQL Server Execution Times:

CPU time = 422 ms, elapsed time = 37038 ms.

000037

SQL Server Execution Times:

CPU time = 35842 ms, elapsed time = 19708 ms.

000019

奇怪!(多列)索引比(单列)索引花费时间要短,但(单列)索引第二次运行Sql语句时间缩短为(CPU time = 218 ms, elapsed time = 733 ms.),而(多列)索引第二次运行Sql语句时间缩短接近一半(CPU time = 35734 ms, elapsed time = 10806 ms.)。同样表现为(单列)索引用的是索引查找,(多列)索引用的是索引扫描

ContactTime(单列)索引和(多列)索引下查询性能对比

SELECT * FROM u_ch_contact WHERE ContactTime BETWEEN '2010-03-01' AND '2010-03-30'

886469

SQL Server Execution Times:

CPU time = 8047 ms, elapsed time = 120984 ms.

000201

SQL Server Execution Times:

CPU time = 7579 ms, elapsed time = 143798 ms.

000224

(单列)索引比(多列)索引在查询数据花费时间要短些,但差距不是大很多。查看执行计划发现(单列)索引和(多列)索引用的都是索引扫描

ContactTelNo(单列)索引和(多列)索引下查询性能对比

SELECT * FROM u_ch_contact WHERE ContactTelNo='15121007351'

36

SQL Server Execution Times:

CPU time = 0 ms, elapsed time = 972 ms.

000001

SQL Server Execution Times:

CPU time = 47282 ms, elapsed time = 17972 ms.

000041

(单列)索引比(多列)索引在查询数据花费时间要短很多,主要表现在(单列)索引用的是索引查找,(多列)索引用的是索引扫描

CreateDate(单列)索引和(多列)索引下查询性能对比

SELECT * FROM dbo.u_ch_Contact WHERE CreatedDate BETWEEN '2010-03-01' AND '2010-03-30'

886461

SQL Server Execution Times:

CPU time = 7078 ms, elapsed time = 125751 ms.

000205

SQL Server Execution Times:

CPU time = 7750 ms, elapsed time = 129782 ms.

000210

(单列)索引比(多列)索引在查询数据花费时间要短些,但非常细微的差距。查看执行计划发现(单列)索引和(多列)索引用的都是索引扫描

EscalatedTo,Escalated2列)索引和(多列)索引下查询性能对比

SELECT * FROM dbo.u_ch_Contact WHERE EscalatedTo='BDD4DE94-A75E-4F00-9FD8-06917B856CC1' AND Escalated=0

229

SQL Server Execution Times:

CPU time = 15 ms, elapsed time = 311 ms.

000000

SQL Server Execution Times:

CPU time = 35204 ms, elapsed time = 11806 ms.

000011

(单列)索引比(多列)索引在查询数据花费时间要短很多,主要表现在(单列)索引用的是索引查找,(多列)索引用的是索引扫描

EscalatedTo,status2列)索引和(多列)索引下查询性能对比

SELECT * FROM dbo.u_ch_Contact WHERE EscalatedTo='BDD4DE94-A75E-4F00-9FD8-06917B856CC1' AND status=3

6004

SQL Server Execution Times:

CPU time = 328 ms, elapsed time = 7449 ms.

(00:00:07)

SQL Server Execution Times:

CPU time = 34811 ms, elapsed time = 13253 ms.

0000:13

(单列)索引比(多列)索引在查询数据花费时间要短很多,主要表现在(单列)索引用的是索引查找,(多列)索引用的是索引扫描

通过以上对比发现:

查询结果行数不大的情况下: (单列)索引用索引查找明显比(多列)索引用的索引扫描有效率。

查询结果行数大的情况下:都是用索引扫描,相差的数据就不是特别明显。


分享到:
评论

相关推荐

    MySQL索引使用说明(单列索引和多列索引)

    本文将深入探讨单列索引和多列索引的使用,并介绍多列索引中的最左前缀原则。 1. 单列索引 单列索引,顾名思义,是在单个列上创建的索引。创建索引的主要目的是优化WHERE子句和JOIN子句中的列。例如,如果一个查询...

    mysql 千万数据表 t_order.zip

    本文将深入探讨如何管理和优化存储着千万级别数据的表,以"t_order"为例,该表可能存在于您提供的压缩包文件"t_order.sql"中。 一、数据库设计与规范 在设计千万级别的数据表时,遵循数据库设计范式至关重要。"t_...

    SQL Server 索引中include的魅力(具有包含性列的索引)

    通过将非键列添加到非聚集索引的叶级别,可以创建覆盖更多查询的非聚集索引。 重要概念: * 覆盖查询:当索引包含查询引用的所有列时,它通常称为“覆盖查询”。 * 索引覆盖:如果返回的数据列就包含于索引的键值...

    [Oracle]如何在亿级记录表中创建索引

    ### Oracle中亿级记录表创建索引的知识点详解 #### 一、背景介绍 在Oracle数据库中处理亿级数据量的表时,合理的索引设计是优化查询性能的关键因素之一...通过以上步骤和建议,可以有效地提高大规模数据表的查询性能。

    七天搞定SQL2005千万级别数据记录+数据库优化经验+代码优化+索引优化

    《SQL Server 2005优化千万级别数据记录与索引优化实践》 在数据库管理领域,处理千万级别的数据记录是一项挑战,尤其是在SQL Server 2005这样的环境中。本文将分享一位开发者针对SqlSever2005一千万条以上记录的...

    Oracle在线建立超大表的索引

    在Oracle数据库中,为含有千万级别记录的大表创建索引是一项挑战性任务,尤其是对于那些处于高并发在线生产环境中的表。本文将详细介绍如何为一个核心大表(INFO_CUSTOMER)创建一个全局B树索引,并在此过程中尽可能...

    索引介绍聚集索引和非聚集索引

    - **查询性能**:对于单列查询,聚集索引通常比非聚集索引快,因为它直接指向数据行。而对于多列查询,尤其是涉及到联合索引的情况,非聚集索引可能更优。 - **更新性能**:由于聚集索引会影响数据行的物理顺序,...

    分区索引,本地索引,全局索引的区别

    - **前缀索引**:如果本地索引的索引列以分区键开头,则该索引称为前缀局部索引(Prefix Local Index)。 - **非前缀索引**:如果索引的列不是以分区键开头,或者不包含分区键列,则该索引称为非前缀索引(Non-...

    查询索引对应的表和列

    在数据库管理中,查询索引对应的表和列是一项基本但重要的技能,它有助于优化查询性能、维护数据库结构以及解决各种数据处理问题。根据给定的文件信息,我们将深入探讨如何查询索引及其关联的表和列,特别是通过两种...

    数据结构--索引顺序表查找

    索引顺序表作为一种有效的数据组织形式,在处理大量有序数据时展现出优秀的性能。通过对索引表的设计和优化,可以大大提高查找操作的速度,适用于多种实际应用场合。掌握索引顺序表的原理及其实现方法对于程序员来说...

    oracle 全文检索 全文索引 多列字段索引

    oracle 全文检索 oracle全文索引 多列字段检索,匹配多列字段搜索功能。

    Mysql千万级别数据优化方案

    在 MySql 单表中数据达到千万级别时,数据的分页查询结果时间过长,对此进行优达到最优效果,也就是时间最短。为了解决这个问题,我们需要了解 MySQL 数据库的分页原理和索引的建立。 二、 解决思路与根据 1. 建立...

    全球城市数据表和json数据

    在数据库管理中,数据表是一种组织数据的方式,它由行和列组成,类似于电子表格。每个列都有一个特定的名称,称为字段或属性,每行代表一个单独的记录。在全球城市数据表中,可能包含的字段有城市名称、国家、人口、...

    mysql多条件索引

    在创建多列索引时,应考虑索引列的选取和顺序。如果新索引是现有多列索引的最左前缀,那么就没有必要单独为前面的列创建索引,因为这不会提供额外的性能提升。 举例来说,如果我们有一个名为`people`的表,包含`...

    Mysql千万级别数据优化方案总结.pdf

    在 MySQL 中,当单表中的数据达到千万级别时,数据的分页查询结果时间可能会变得很长。为解决这个问题,我们需要采取相应的优化措施,以达到最短的时间。 建立索引 建立索引是优化 MySQL 查询性能的一种重要方法。...

    采购数据表的索引集合1

    8. **子表和子子表的外键索引**:如`i_表名_fghi`和`i_表名_fgbi`,这些索引增强了多表查询的性能,特别是当主从关系的数据需要联查时。 此外,还提到了三个具体的采购业务表格及其对应的索引: - **物资需求申请...

    DB2索引及其优化(设计,优化,问题分析,解答,举例)

    * 单列索引和多列索引 * 一般索引和复合索引 索引优化 索引优化是数据库性能优化的关键部分。索引优化可以提高查询性能,减少磁盘I/O,并提高数据库的整体性能。索引优化需要考虑以下几点: * 索引的选择:选择...

    MySql练习4:创建学生表和成绩表索引并查看索引.zip

    - **唯一索引(UNIQUE)**:确保索引列中的每个值都是唯一的,不允许有重复。 - **主键索引(PRIMARY KEY)**:一个表只能有一个主键,它既是唯一索引也是非空索引。 - **普通索引(INDEX)**:最基础的索引,...

    MySql索引详解,索引可以大大提高MySql的检索速度

    单列索引,即一个索引只包合单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在SQL查询语的条件(一般作为WHERE 子句的条件)实际上,索引...

Global site tag (gtag.js) - Google Analytics