记MySQL一次关于In的优化
MySQL版本:5.6.14详见MySQL技术内幕:SQL编程 102页files表记录的是dfs系统中的文件信息.有一批数据上传出现错误,需要重新上传.错误文件的范围已经记录在了test.files_20170206表中。运行如下查询,竟然很长时间没有结果.* files t1 (,) (select,() files f oldpath &nbs...
MySQL in UnionAll结果集的优化
问题还是前面的问题http://blog.itpub.net/29254281/viewspace-1878089/http://blog.itpub.net/29254281/viewspace-1961333/MySQL 5.6.14需求:找用户和用户朋友唱的歌,按照时间排序,返回最近的30个.原来的SQL:select 1 dynamicType, ...
使用STRAIGHT_JOIN优化一则
还是之前的那个事情.http://blog.itpub.net/29254281/viewspace-1878089/这个东西我还是想简单了.原来的那个SQL,对于正常添加好友的用户,速度是很快的.但是对于大量添加好友的用户,则会非常慢.但是我们没有限制用户添加好友的最大数量.这是问题的关键.有的用户竟然添加了上万的好友.对于大量添加好友的用户,而无论...
一次UnionAll的合并优化
VV音乐朋友圈的功能1.找自己唱的歌,找自己好友唱的歌.2.找自己分享的歌,找自己好友分享的歌.然后根据时间排序,返回30个记录.space_av 用户唱歌记录表space_share 用户分享歌曲表.其中ObjectID和space_av的avid是关联关系.原SQL.用户好友比较少的时候,运行正常.但是用户好友很多的情况,比如超过1000个好友.SQL运...
MySQL union的一种优化
今天遇到一个很奇怪的问题SELECT zav.ZpID ZpID, zav.Name Name, zav.PlayTimes PlayTimes, zav.UserID UserID, &...
左百分号模糊查询的优化
先创建一个实验表,只有歌曲名称一列create table test(name varchar2(50));insert into test values('童年');insert into test values('家家有本难念的经');insert into test values('清风月朗&如山如水亦如虹翻唱《因为爱情》');insert into test values('爱的那份痛');insert into test values('倒带');insert in...
优化Oracle with全表扫描的问题(二)
http://blog.itpub.net/29254281/viewspace-1242731/尽信书不如无书Oracle的优化器也不是万能的。还是上次的SQL,开发说有时候执行时间超过3s。我又查了查执行计划,发现有全表扫描和索引快速全扫描。这个是不符合预期的。抽象问题如下:create table emp as select * from hr.employees; crea...
优化Oracle with全表扫描的问题
今天开发接了一个很BT的需求。找一个人的所有好友,查询所有好友的所有作品,然后按照时间倒序排列,取若干记录,然后关联作品评论表。作品包括原唱表,翻唱表,伴奏表,视频表,博客表和照片表,不同的作品类型还要关联不同的专辑表,最后还要关联用户表..结果就是这个SQL很长...witht1 as (select to_userid from ...
使用索引优化StopKey
今天遇到一个调优的问题。模拟的表结构如下:create table test ( id int primary key, name varchar2(10), createtime date );insert into test select rownum,rownum,sysdate-rownum from dual connect by level<1000...
【MySQL】 性能优化之 延迟关联
分页排序在数据库业务中十分常见,大数量的分页造成性能下降,给前端带来很差的用户体验而且也会对数据库本身带来很大压力,如何解决呢?本文通过介绍 延迟关联的思路和具体优化案例,希望能够给大家一些提示。
行转列的一种优化思路
在论坛看到一个帖子,需求是行转列。但是表中的数据是千万级别的,运行很慢。楼主的SQLset linesize 300;set pagesize 300;WITH t AS( SELECT 'shop001' AS shopcode, 'store002' storecode,101 b_ID, 2 num,10.5 price FROM dual UNION ALL...
禁用内嵌视图的排序
MySQL会对group by字段进行排序,但是一些内嵌视图中的group by本身就是中间过程,没有必要进行排序。这种场景可以使用order by null禁用内嵌视图的排序。如下SQLSELECT DISTINCT a.*, c.downNumFROM sod_artist a INNER JOIN sod_artist_category_relation b ON a.ArtistID = b.ArtistID LEFT JOI...
MySQL Count(*)提速30倍
MySQL InnoDB是索引组织表,如果根据主键大范围查询,效率非常低下。因为主键索引中还包含数据,需要扫描大量的块。这种场景,如果有一个二级索引,则可以极大的提升查询速度。初始化实验数据(100W记录)--创建实验表create table t( id int primary key,...
解决对时间列运算导致不能走索引的问题
剑破冰山Oracle开发艺术353页刚刚作为DBA入职新单位,查看了一下AWR,发现很多SQL需要查询当天的记录。模拟环境如下:create table test( c1 timestamp);insert into test select systimestamp+(rownum-10) from dual connect by l...
使用组合索引处理包含空值的查询
字段不全为空的行可以被索引如果有这样一种需求,尚未处理的单据,该列为null。已经处理的单据,则将处理人的ID更新到该列。那么查询尚未处理的单据,就需要查询该列为null的行。处理这个需求,除了函数索引,还可以使用组合索引。假设处理人的那个字段就是测试表中的ID字段。create table test(...
使用索引消除排序
索引是有顺序的,如果一个查询使用索引,可以利用索引的顺序读取数据,这样可以消除OrderBy的排序。 前提:索引列的顺序和OrderBy的顺序完全一致 实验使用Hr模式的Employees表,查询某个工种(job_id)的所有员工,并且按照入职时间降序排列。查看索引对排序的影响。cre...
Oracle函数索引
首相,创建一张表,只有很少量的记录状态为'N',而我们只需要查询状态为'N'的记录SQL> create table test as select 'Y' flag,o.* from dba_objects o;SQL> update test set flag='N' where rownum<10;已更新9行。SQL> commit;提交完成。然后分别创建函数索引和普通索引SQL> create index inx_flag_n on test(de...