背景说明:SO表的APPL_DATE字段上具有normal索引,现在要根据该字段按天归类,形成当天的日报。
困难说明:so表是一个存储海量数据的巨表,完成业务统计要求与提升统计效率之间形成了一对矛盾,如下是先后尝试采用的三个方案,最终我们选择了第3号方案。
1.使用trunc(sysdate)
- SELECT SO.PROD_ID PROD_ID,
- SO.CHG_SERV_SPEC_ID SERV_ID,
- SO.SO_STS SERV_STS,
- SO.STS ORDER_STS,
- COUNT(1) STATI_QUAITITY,
- SYSDATE STATI_DATE
- FROM SO
- WHERE 1 = 1
- AND TRUNC(SO.APPL_DATE) = TRUNC(SYSDATE)
- AND SO.STS = 'A'
- GROUP BY SO.PROD_ID, SO.CHG_SERV_SPEC_ID, SO.SO_STS, SO.STS
- ORDER BY SO.PROD_ID, SO.CHG_SERV_SPEC_ID, COUNT(1) DESC
sql效率:
使用方式INDEX FULL SCAN扫描
cost值=63211,cardinality=15774,实际执行时间200s左右
应用分析:
通过使用trunc函数截断得到当天的所有定单,完美的实现了统计要求,但是这种查询耗费的成本是最高的,耗时更是令人无法忍受,这种方案必定不能通过。
2.使用=sysdate
- SELECT SO.PROD_ID PROD_ID,
- SO.CHG_SERV_SPEC_ID SERV_ID,
- SO.SO_STS SERV_STS,
- SO.STS ORDER_STS,
- COUNT(1) STATI_QUAITITY,
- SYSDATE STATI_DATE
- FROM SO
- WHERE 1 = 1
- AND SO.APPL_DATE =SYSDATE
- AND SO.STS = 'A'
- GROUP BY SO.PROD_ID, SO.CHG_SERV_SPEC_ID, SO.SO_STS, SO.STS
- ORDER BY SO.PROD_ID, SO.CHG_SERV_SPEC_ID, COUNT(1) DESC
sql效率:
使用方式INDEX RANGE SCAN扫描
cost值=11,cardinality=5,实际执行时间0.1s以下
应用分析:
直接和sysdate做等值连接,使用INDEX RANGE SCAN方式扫描,极大的提升了sql查询效率;
但是这种查询只可以获得当前时刻的定单条目,而不能获得统计要求的当天时间范围内的定单条目,因此是完全违背业务要求的,不合格的。
3.使用between sysdate-1 and sysdate
- SELECT SO.PROD_ID PROD_ID,
- SO.CHG_SERV_SPEC_ID SERV_ID,
- SO.SO_STS SERV_STS,
- SO.STS ORDER_STS,
- COUNT(1) STATI_QUAITITY,
- SYSDATE STATI_DATE
- FROM SO
- WHERE 1 = 1
- AND so.appl_date BETWEEN SYSDATE-1 AND SYSDATE
- AND SO.STS = 'A'
- GROUP BY SO.PROD_ID, SO.CHG_SERV_SPEC_ID, SO.SO_STS, SO.STS
- ORDER BY SO.PROD_ID, SO.CHG_SERV_SPEC_ID, COUNT(1) DESC
sql效率:
使用方式INDEX RANGE SCAN扫描
cost值=266,cardinality=15481,实际执行时间5s以下
应用分析:
这里使用BETWEEN SYSDATE-1 AND SYSDATE获取定单条目,使用了INDEX RANGE SCAN扫描记录,sql效率介于1号、2号方案之间,5s以下的执行时间也完全在可忍受的范围之内;
同时,在时间上去了一个相对的一天,并不是完全的从早上0点到晚上24点,实际操作中会有一些偏差,但这是十分微小的。
因此,这是一个折中的方案。
分享到:
相关推荐
在查询中使用日期字段时,需要注意格式化字符串的使用。例如: ```sql SELECT * FROM ti WHERE dscdate = '2008-02-02 00:00:00'; SELECT * FROM ti WHERE dscdate = '2008-02-02'; ``` 第一行代码用于精确匹配特定...
MySQL数据库在设计表结构时,选择正确的存储字段类型对于查询效率和存储空间的优化至关重要。以下是对标题和描述中提到的知识点的详细说明: 1. **整数类型**: - 整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT...
假设我们有一个`Titles`表,其中包含一个名为`PubDate`的日期字段,我们想查询所有书籍在21天后的情况,可以使用以下SQL语句: ```sql USE pubs; GO SELECT DATEADD(day, 21, PubDate) AS TimeFrame FROM Titles; ...
本文将深入探讨“日历插件(在日期下方添加字段)”这一主题,详细介绍如何通过定制化的方式在日历日期下方添加自定义字段,以满足用户的个性化需求。 首先,我们要理解日历插件的基本功能。一个标准的日历插件通常...
在Access数据库中,日期间隔查询是一项重要的功能,它允许用户基于日期字段进行复杂的筛选和分析。日期间隔查询常用于统计特定时间段内的数据,比如计算过去一年的销售额、查找某个日期范围内的记录,或者分析周期性...
查询字段名称是指在查询模板中设置的字段名称,可以根据需要修改字段名称以满足业务需求。例如,可以将字段名称设置为“客户名称”、“订单日期”等。 查询字段顺序: 查询字段顺序是指在查询模板中设置的字段显示...
9. **数据库索引优化**:对于大量日期数据,对日期字段创建索引可以提高查询效率,但也要注意避免索引失效的情况,如在使用`BETWEEN`时。 10. **版本控制**:在开发过程中,使用版本控制系统(如Git)来管理代码,...
在本文中,我们将讨论索引和字段存储的优化方法,以提高查询效率。 索引的影响 索引是 MySQL 数据库中的一种机制,它可以提高查询效率。但是,如果设置不当,索引可能会适得其反。因此,在设置索引时一定要谨慎。...
6. **处理错误**:在循环中添加异常处理,以应对可能的错误,如文件不存在或权限问题: ```python try: ... except Exception as e: print(f"Error processing {excel_file}: {e}") ``` 7. **保存并运行脚本*...
在编写ABAP程序时,理解并正确使用系统字段是提高代码效率和可维护性的关键步骤。 总的来说,SAP ABAP中的系统字段是一组预定义的变量,用于传递运行时信息,它们可以帮助开发者更好地理解和控制程序的执行流程。...
8. **性能优化**: 对于复杂的多表多字段查询,可能需要考虑索引优化、子查询、联接类型选择等因素,以提高查询效率。 9. **事务处理**: 对于涉及多个操作的查询,可以使用TADOTransaction组件进行事务控制,确保...
在JPA中,我们可以使用`@Temporal`注解来指定日期字段的存储类型: - `@Temporal(TemporalType.DATE)`:仅存储日期部分。 - `@Temporal(TemporalType.TIME)`:仅存储时间部分。 - `@Temporal(TemporalType....
【内容查询Web部件】是一种强大的工具,用于在Microsoft Office SharePoint Server 2007网站上展示动态的内容视图。它可以跨多个列表、网站甚至整个网站集执行查询,并将结果显示在页面上。这种功能使得用户无需关注...
在数据库设计与管理中,选择合适的字段类型对于数据的存储效率、查询性能以及数据完整性至关重要。SQL Server 提供了丰富的数据类型,覆盖了从基本数值到复杂文本、图像等各类数据的存储需求。下面将详细解析《SQL ...
1. **表单验证**:当用户填写表单时,某些字段的值可以限制其他字段的输入范围,比如日期范围、选择项等。 2. **智能填充**:根据已输入信息,自动填充相关字段,如地址信息、联系方式等。 3. **流程控制**:字段...
9. 性能优化:当处理大量数据或频繁查询时,了解数据库的索引、缓存机制以及优化查询语句(如避免全表扫描)能够显著提高字段获取的效率。 10. 多表联合查询:在复杂的应用场景下,可能需要从多个表中获取字段。这...
总的来说,"Dynamics crm QueryAttributeType (查询字段类型及字段中文名称)"工具是Dynamics CRM开发和管理过程中的一个实用助手,通过它,用户可以更高效地管理和操作CRM系统中的数据,提高工作效率。安装并使用...
* 在命名表的字段时,不要重复表的名称。 * 每一张表都有一行名为ID的列,长度为18,数据类型为Int。 * 所有字段的第一个单词的首字母要小写,且一般不超过三个英文单词。 * 第二个及或后面单词的首字母要大写。 * ...
在IT行业中,数据库管理和查询是至关重要的技能,尤其是在企业级应用开发中。ACCESS数据库作为一款常用的轻量级数据库管理系统,提供了强大的数据存储和查询功能。本文将深入探讨如何使用SQL语句进行日期查询,这...
正确设置和查询这些字段,可以确保考勤数据的准确性和及时性。 4. 日成本管理系统:关注的是每日运营成本的记录与分析,如成本类别、费用发生日期、成本金额等。掌握这些字段,有助于企业实时监控成本,优化资源...