- 浏览: 208692 次
- 性别:
- 来自: 哈尔滨
文章分类
- 全部博客 (267)
- java.lang (8)
- 问题汇总 (21)
- 异常记录 (20)
- 功能实现 (19)
- 面试总结 (25)
- 技巧总结 (8)
- 常用代码 (4)
- 编程习惯 (3)
- 编码规则 (3)
- java.util (10)
- java.io (1)
- JavaWeb (9)
- MySQL (16)
- SVN (3)
- MyBatis (11)
- Velocity (7)
- 其他知识 (10)
- 人生哲理 (1)
- 人生故事 (1)
- 自我感悟 (1)
- shiro (3)
- 基础知识 (0)
- 问题总结 (1)
- Spring 标签 (1)
- Spring (3)
- 点滴生活 (1)
- DOS (1)
- CAS (4)
- Linux (9)
- Storm (6)
- Shell (1)
- regex (1)
- Collection (4)
- poi (1)
- 经典语句 (1)
- NIO (5)
- concurrent (14)
- RPC (1)
- zookeeper (3)
- 待整理 (2)
- Hadoop (9)
- RabbitMq (2)
- flume (1)
- hive (7)
- hbase (4)
- kafka (1)
- scala (1)
- GC (0)
- java.util.concurrent.atomic (1)
- java.lang.ref (6)
- JVM (2)
- algorithm (1)
- conception (1)
- java key word (1)
- sun.misc (1)
最新评论
一、distinct 、 union all 、 union 区别
1.问题SQL及改进SQL
2.性能分析:
通过explain 查询结果显示:
其他指标基本相同,rows :MYSQL认为必须检查的用来返回请求数据的行数
改进后要比前者少了50%的数据量
3.原因分析:
Union all 与 Union 区别
博文参考:
http://blog.csdn.net/jesseyoung/article/details/40427849
http://blog.csdn.net/liuxiaohuago/article/details/7075371
distinct 使用后可以识别到索引;distinct 依然是查询索引中所有的数据
仅对索引进行查询(Index-only queries):如果查询的列都位于索引中,则不需要读取元组的值。
博文参考:
理解MySQL——索引与优化
前者:
两个子查询通过索引
两个大的集合通过 Union 合并并去重
后者:
将两个不含重复的数据的集合进行合并不去重,
再在合并后的集合中去重
4.经验总结
使用union 前考虑是否需要去重;如果需要改为 在单个查询中使用 distinct
合并时使用 union all
二、时间类型查询
1.问题SQL及业务逻辑
2.SQL优化
3.经验总结
除必要的函数调用外不要在SQL中进行函数的处理,会影响效率
1.问题SQL及改进SQL
-- 表结构,user_id c_user 分别添加了索引,且字段可空,varchar(32),编码UTF-8 -- 问题SQL select count(c_user) from (select user_id as c_user from jr_td_project_invest union select c_user from p2p_td_project_invest ) as count_investor; -- 改进后: select count(distinct c_user) from (select distinct user_id as c_user from jr_td_project_invest union all select distinct c_user from p2p_td_project_invest ) as count_investor;
2.性能分析:
通过explain 查询结果显示:
其他指标基本相同,rows :MYSQL认为必须检查的用来返回请求数据的行数
改进后要比前者少了50%的数据量
3.原因分析:
- distinct 取出重复数据
- union all 合并不去除重复数据,即会列出所有的值,不进行合并
- union 合并且去重,将两个集合合并后先排序distinct 去重,再 union all
- explain 结果中 key_len: 编码为UTF-8,varchar 数据类型所占字节数为 字符长度n*3+2字节+1字节(索引字段为空+1字节) = 99
Union all 与 Union 区别
博文参考:
http://blog.csdn.net/jesseyoung/article/details/40427849
http://blog.csdn.net/liuxiaohuago/article/details/7075371
EXPLAIN select user_id as c_user from jr_td_project_invest ;
EXPLAIN select distinct user_id as c_user from jr_td_project_invest ;
distinct 使用后可以识别到索引;distinct 依然是查询索引中所有的数据
仅对索引进行查询(Index-only queries):如果查询的列都位于索引中,则不需要读取元组的值。
博文参考:
理解MySQL——索引与优化
前者:
两个子查询通过索引
两个大的集合通过 Union 合并并去重
后者:
将两个不含重复的数据的集合进行合并不去重,
再在合并后的集合中去重
4.经验总结
使用union 前考虑是否需要去重;如果需要改为 在单个查询中使用 distinct
合并时使用 union all
二、时间类型查询
1.问题SQL及业务逻辑
-- 有两处业务场景使用如下SQL -- 签到日历列表查询,展示本月已签到天数 -- 当天是否已签到 -- 实现原理:DATE_FORMAT 函数中格式化时间部分为动态传入的参数,若查询列表,则%y-%m ;若查询某一天 %y-%m-%d SELECT CREATE_TIME, TYPE, POINT, POINT_PERIOD FROM jf_user_point_record WHERE 1 = 1 AND USER_ID = ? AND DATE_FORMAT(CREATE_TIME, ?) = ? AND TYPE = ? ORDER BY CREATE_TIME ASC
2.SQL优化
-- 拆分为两个SQL,按照上述的业务场景 -- 当天是否已签到,将查询到的DATE 与当天日期进行比较 SELECT CREATE_TIME FROM `jf_user_point_record` WHERE USER_ID = "" AND TYPE = ? ORDER BY RECORD_ID DESC LIMIT 1 ; -- 排序按照主键排序,主键有索引,且数据插入顺序递增,完全不可以不适用create_timem 作为排序条件 -- 列表查询 SELECT CREATE_TIME, TYPE, POINT, POINT_PERIOD FROM jf_user_point_record WHERE 1 = 1 AND USER_ID = ? AND CREATE_TIME >= #{} -- 当月1日的日期 AND TYPE = ? ORDER BY RECORD_ID ASC -- SQL中尽量避免使用函数在字段上,如果字段上添加了索引,使用函数会导致索引失效 -- 另外,比较当天的时间可以使用 CREATE_TIME like "2017-11-03%" -- 时间参数格式化在Service 层处理
3.经验总结
除必要的函数调用外不要在SQL中进行函数的处理,会影响效率
发表评论
-
索引相关(二)
2017-11-05 21:13 489索引相关 一、InnoDB 与 MyISAM 对比 存储引 ... -
索引相关
2017-11-02 20:42 509一、索引分类 1.单列索引:一个索引包含一列,一个表可以包含 ... -
检索指定时间范围内的数据与预期不一致
2017-10-30 20:38 562问题背景: 在不同日期内进行不同的业务逻辑,在测试环境进行模拟 ... -
存储引擎InnoDB与MyISAM区别
2017-10-29 17:26 372存储引擎 一、总结 名称MyISAMInnoDB事务不支持支 ... -
常用索引优化
2017-10-29 16:07 380唯一索引 联合索引 索引方式:BTREE 1.order b ... -
统计每天的数据
2017-10-10 21:23 536需求:按天统计数据 分析:create_time 为 dat ... -
DDL - CREATE
2017-08-05 06:10 480一、基本语句 CREATE TABLE `data_te ... -
数据统计
2016-06-12 17:04 552按照时间统计各个阶段的数据数量 1.统计每个月卖家的注册数量 ... -
1030 Got error 28 from storage engine
2016-05-24 22:25 1313现象:调试程序过程中,突然报错,显示数据检索失败,数据库连接超 ... -
批量数据修改
2015-08-19 15:39 435问题:增加新功能,需要初始化数据,执行update、inser ... -
mysql 如何查询出某字段的值不为空的数据
2015-06-30 19:05 2901问题:查询原有某类数据的数量,对比发现,新旧数据的差距是新插入 ... -
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException
2015-05-21 15:38 836异常: com.mysql.jdbc.exceptions.j ... -
You can't specify target table <tbl> for update in FROM clause
2015-04-23 10:50 727[size=large][/size] mysql中You ... -
MySQL-删除除id外其他内容都相同的数据
2015-04-23 09:24 1091删除除id外其他内容都相同的数据 难点:自己不能删除自己,要 ... -
MySQL常用操作总结
2015-04-23 08:32 537常用数据表操作: 虽然有DBA的存在,但PD(program ...
相关推荐
"SQL性能优化示例"这个资源专为开发人员和高级DBA设计,旨在提供实用的优化策略和代码实例。以下是关于SQL性能优化的一些关键知识点: 1. **查询优化**:SQL查询优化是最基础的性能提升手段。通过重构查询语句,...
oracle+SQL优化实例.pdf
根据提供的文件内容,我们可以了解到文档《SQL优化指导示例2.pdf》主要讨论了在Vertica数据库系统中如何进行SQL语句的优化。Vertica是一个面向列的高性能分析数据库,特别适合于处理大规模数据集。本文的知识点涉及...
这些示例数据库不仅提供了实践操作的机会,还能帮助用户了解如何设计和优化数据库结构,处理事务,以及如何使用SQL Server的高级特性。例如,你可以通过AdventureWorks学习如何定义表之间的关系,如何创建索引以提高...
在这个“sql2000示例数据库”中,我们看到几个重要的文件,它们分别是NORTHWND.LDF、PUBS_LOG.LDF、NORTHWND.MDF和PUBS.MDF。这些文件是SQL Server数据库的关键组成部分,下面将详细介绍它们的用途以及与SQL Server ...
- **全书总结**:本书不仅是一本关于SQL优化的技术书籍,更是引导读者进入SQL优化世界的指南。通过丰富的案例、实战经验和深入的技术探讨,帮助读者建立起从宏观到微观的优化思路,并最终达到“爽”的境界。 - **...
通过执行这些脚本并进行查询,你可以深入理解SQL Server的事务处理、索引优化、备份恢复、权限管理等高级特性。 总的来说,"SQLServer示例数据库脚本"是一个宝贵的资源,无论是初学者还是经验丰富的开发人员,都能...
### SQL编程示例详解 #### 标题与描述解析 本次分享的主题是“SQL编程示例学习”,旨在通过具体的代码示例帮助初学者理解和掌握SQL编程的基础知识和技术要点。SQL(Structured Query Language)是一种用于管理关系...
SQL Server示例数据库是Microsoft SQL Server提供的一组预先构建的数据库,用于演示、学习和测试SQL Server的功能。这些数据库包含了各种复杂的数据结构和业务场景,让开发者和DBA能够更好地理解如何在实际环境中...
在这个“sql2005 示例数据库”压缩包中,包含了几个经典的示例数据库,它们对于学习和理解SQL Server 2005的功能、数据管理和查询语言SQL具有极大的帮助。 首先,我们来看看主要的三个示例数据库: 1. **...
### MySQL数据库SQL优化 #### 一、SQL优化 在MySQL数据库管理中,SQL查询的性能直接影响到系统的响应时间和资源消耗。通过合理的SQL优化,可以显著提高数据处理速度,降低服务器负载,提升用户体验。 ##### 1.1 ...
SQL Server 2005的示例数据库是为了帮助用户更好地理解和学习SQL Server的功能和用法而提供的实际数据库实例。下面将详细介绍这个示例数据库以及相关的知识点。 首先,SQL Server 2005的示例数据库通常包括多个预定...
这些示例通常涵盖查询、数据管理、存储过程、触发器、索引优化等多个方面,对于初学者和经验丰富的DBA(数据库管理员)来说都是宝贵的资源。 描述中提到,这是微软公司提供的SQL2012示例,适合需要进行实践操作的...
《收获,不止SQL优化》是一本专注于数据库性能优化的书籍,尤其关注Oracle数据库系统的SQL调优。这本书通过实例和深入的解析,帮助读者理解和掌握如何提升SQL查询的效率,从而优化整个数据库系统的性能。在阅读这...
SQL Server 示例数据库是微软SQL Server数据库管理系统中提供的一系列预设数据库,用于演示、学习和测试目的。这些数据库包含了各种真实世界的数据模型和业务场景,帮助用户了解如何在实际环境中设计、操作和优化...
Microsoft SQL Server 2008技术内幕 T-SQL 查询 一书中,第四章,索引优化章节的示例数据库脚本。
### SQL示例大全 V1.0 - 更新内容详解 #### 一、单表高性能分页存储过程 在数据库查询操作中,特别是在Web应用环境中,分页功能是非常常见且必要的。通常,当数据量非常大时,一次性加载所有的数据不仅会消耗大量...
本书是作者十年磨一剑的成果之一,深入分析与解剖Oracle SQL优化与调优技术,主要内容包括: 第一篇“执行计划”详细介绍各种执行计划的含义与操作,为后面的深入分析打下基础。重点讲解执行计划在SQL语句执行的生命...
通过深入研究和操作SQL Server 2005的AdventureWorks示例数据库,用户不仅可以掌握SQL语言的基本用法,还能了解到数据库设计、管理、性能优化等多个方面的重要知识,对于提升数据库管理和开发技能非常有帮助。