一条SQL的绝地求生优化设置,求解答

查看: 4475|回复: 15
一条SQL语句加了order by xx desc需要27秒,不加只需要2秒,求优化。
论坛徽章:2
本帖最后由 莫不言 于
11:41 编辑
求order by xx排序优化。
xx 是一个表的主键。
select xxx_0_0_,
& && & xxx_1_0_,
& && & xxx_2_0_,
& && & xxx_3_0_,
& && & xxx_4_0_,
& && & xxx_5_0_,
& && & xxx_6_0_,
& && & xxx_7_0_,
& && & xxx_8_0_,
& && & xxx_9_0_,
& && & xxx_10_0_
&&from (select adminco0_.adminContactID as xxx_0_0_,
& && && && && &admin1_.Name as xxx_1_0_,
& && && && && &adminco0_.Name as xxx_2_0_,
& && && && && &adminco0_.Gender as xxx_3_0_,
& && && && && &adminco0_.Position as xxx_4_0_,
& && && && && &adminco0_.BirthPlace as xxx_5_0_,
& && && && && &adminde2_.Name as xxx_6_0_,
& && && && && &adminco0_.Hobby as xxx_7_0_,
& && && && && &adminco0_.Notes as xxx_8_0_,
& && && && && &(select Telephone
& && && && && && &from (select addressboo3_.Telephone
& && && && && && && && &&&from adminpab addressboo3_
& && && && && && && && & where adminco0_.adminContactID =
& && && && && && && && && && & addressboo3_.PersonId)
& && && && && &&&where rownum &= 1) as xxx_9_0_,
& && && && && &(select Cellphone
& && && && && && &from (select addressboo4_.Cellphone
& && && && && && && && &&&from adminpab addressboo4_
& && && && && && && && & where adminco0_.adminContactID =
& && && && && && && && && && & addressboo4_.PersonId)
& && && && && &&&where rownum &= 1) as xxx_10_0_
& && && & from adminContact adminco0_
& && && & left outer join admin admin1_
& && && && &on adminco0_.adminID = admin1_.adminID
& && && & left outer join adminDepartment adminde2_
& && && && &on adminco0_.adminDepartmentID =
& && && && && &adminde2_.adminDepartmentID
& && && &order by adminco0_.adminContactID desc)
where rownum &= : p0
论坛徽章:127
排序本身就是要耗费resource的
认证徽章论坛徽章:3
order by就是耗时间的其实查询出数据后程序排序不知道行不行
论坛徽章:136
通常排序不会影响这么大,有2种可能
1.order by后执行计划走的有问题&&
2.你看到2s是plsql看出来的,还是set timing on看出来的,如果是plsql看出来的,那你返回所有数据看看 时间多少,加了order by后,返回初始行的时间变长
论坛徽章:71
没啥太好办法,考虑并行执行和增加PGA空间。
论坛徽章:306
先确定是不是ORDER BY 导致耗时增长。
论坛徽章:7
wolfop 发表于
没啥太好办法,考虑并行执行和增加PGA空间。
并行和增加pga,结合业务需求,还可以改all_rows或first_rows_n
论坛徽章:2
东东堂 发表于
并行和增加pga,结合业务需求,还可以改all_rows或first_rows_n
select xxx_0_0_,
& && & xxx_1_0_,
& && & xxx_2_0_,
& && & xxx_3_0_,
& && & xxx_4_0_,
& && & xxx_5_0_,
& && & xxx_6_0_,
& && & xxx_7_0_,
& && & xxx_8_0_,
& && & xxx_9_0_,
& && & xxx_10_0_
&&from (select adminco0_.adminContactID as xxx_0_0_,
& && && && && &admin1_.Name as xxx_1_0_,
& && && && && &adminco0_.Name as xxx_2_0_,
& && && && && &adminco0_.Gender as xxx_3_0_,
& && && && && &adminco0_.Position as xxx_4_0_,
& && && && && &adminco0_.BirthPlace as xxx_5_0_,
& && && && && &adminde2_.Name as xxx_6_0_,
& && && && && &adminco0_.Hobby as xxx_7_0_,
& && && && && &adminco0_.Notes as xxx_8_0_,
& && && && && &(select Telephone
& && && && && && &from (select addressboo3_.Telephone
& && && && && && && && &&&from adminpab addressboo3_
& && && && && && && && & where adminco0_.adminContactID =
& && && && && && && && && && & addressboo3_.PersonId)
& && && && && &&&where rownum &= 1) as xxx_9_0_,
& && && && && &(select Cellphone
& && && && && && &from (select addressboo4_.Cellphone
& && && && && && && && &&&from adminpab addressboo4_
& && && && && && && && & where adminco0_.adminContactID =
& && && && && && && && && && & addressboo4_.PersonId)
& && && && && &&&where rownum &= 1) as xxx_10_0_
& && && & from adminContact adminco0_
& && && & left outer join admin admin1_
& && && && &on adminco0_.adminID = admin1_.adminID
& && && & left outer join adminDepartment adminde2_
& && && && &on adminco0_.adminDepartmentID =
& && && && && &adminde2_.adminDepartmentID
& && && &order by adminco0_.adminContactID desc)
where rownum &= : p0
加了order by adminco0_.adminContactID desc&&PLSQL/DEV 查询28秒。
问了开发人员为什么要排序,主要是为了新增人员的资料的时候,查询的时候能在界面的最前面显示出来。
论坛徽章:3
将排序的字段建一个索引貌似可以提高查询速度,新手之见,不足请指出。
论坛徽章:2
blue木木 发表于
将排序的字段建一个索引貌似可以提高查询速度,新手之见,不足请指出。
排序的那个字段adminContactID是主键列。
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号求大神帮忙优化一条SQL语句(多表查询,每个inner join都是一个查询条件)给100分,效果好的再加分_百度知道
求大神帮忙优化一条SQL语句(多表查询,每个inner join都是一个查询条件)给100分,效果好的再加分
SQL语句如下:
SELECT g.goods_id,g.goods_sn,g.goods_name,gc.color_id,gz.size_id,gu.sku_id,gu.sku
FROM encm_products_goods a
INNER JOIN goods g ON a.goods_id=g.goods_id
INNER JOIN goods_color gc ON a.goods_id=gc.goods_id
INNER JOIN goods_size...
我有更好的答案
color_id=gu.products_id=1&&GROUP&nbsp?tim_spac说的没错,并没有使用表goods_color和goods_size中的其它字段,size_id和color_id在表goods_sku中都有.sku&&&&&&FROM&encm_products_goods&aINNER&nbsp.goods_id&nbsp,gz.size_id,&&&&&&&&&&&gu,可以不用join这两个表,除非为了数据一致性或取得相关的其它字段。&&&&SELECT&g.goods_id,g.goods_sn,g.goods_name.size_id=gu.size_idINNER&JOIN&goods&JOIN&ASC,gc.color_goods_color&gc&ON&g&ON&g.goods_id=gu.goods_id&&&&&WHERE&nbsp.sku_id,JOIN&gz.size_id&goods_sku&gu&on&g.size_id&&ORDER&nbsp.goods_id&=&a.goods_idINNER&BY&nbsp.color_idINNER&JOIN&goods_size&gz&ON&DESC,&1&AND&a;BY&nbsp.goods_id,gc.color_id,g.color_id&nbsp,&nbsp改变一下inner join顺序试试呢?另外现在有哪些索引
采纳率:75%
g&INNER&&nbsp,&gu.color_id&&&&;EXISTS&nbspSELECT&DISTINCT&&&&&&g.goods_,&FROM&nbsp.sku_id,&&&nbsp.goods_id&gu.size_id&nbsp.skuFROM&goods&ASC;JOIN&g,&1=1AND&(SELECT&1&encm_products_goods&a&&&nbsp,&&=&1&&&AND&a.products_id&nbsp.color_id&nbsp.goods_id&g.goods_sn,&g.goods_name&&&&;&&=&g.goods_id&WHERE&BY&DESC,&ASCgoods_color .goods_id&nbsp,&&WHERE&a.goods_id=g;)ORDER&gu.size_id&nbsp,&&goods_sku&gu&ON&gu
语句很简洁,只能从索引方面优化了,首先确保全部on的条件字段上有索引看下效果
为您推荐:
其他类似问题
sql语句的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。急求一段SQL语句的优化_百度知道
急求一段SQL语句的优化
SELECT top 12 ku_user.userid,nickname,username,addtime,admin,money,userPhoto,truename,tel,shenhe,uservip,jifen
, (select count(*) from operateLog where operateLog.userid = [user].id AND operateLog.objTIme & getDate()-20 ) as loginhits
我有更好的答案
SQLSERVER多少呢?2005以上可以优化呢
sql2000的啊!没办法吗?我感觉可以从先排loginhits着手!可是不清楚怎么写啊
SQL 2000我琢磨下Try thisSELECT top 12 ku_user.userid,nickname,username,addtime,admin,money,userPhoto,truename,tel,shenhe,uservip,jifen , t1.cnt as loginhits, (select top 1 objTime from operateLog where operateLog.userid =[user].id order by objTime desc) as logintime FROM [user],ku_user
INNER JOIN (SELECT userid, count(1) as cnt from operateLog where objTIme & getDate()-20 group by userid) t1ON t1.userid = [user].id WHERE [user].id = ku_user.userid AND ku_user.shenhe = 0
ORDER BY loginhits DESC ,logintime DESC
采纳率:52%
为您推荐:
其他类似问题
sql语句的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。> 问题详情
说出一些数据库优化方面的经验?
悬赏:0&答案豆
提问人:匿名网友
发布时间:
说出一些数据库优化方面的经验?请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
12、union和union all有什么不同?23、oracle关联查询题目1数据库中有3 个表 teacher 表,student 表,tea_stu 关系表。teacher 表 teaID name agestudent 表 stuID name ageteacher_student 表 teaID stuID要求用一条sql 查询出这样的结果1.显示的字段要有老师name, age 每个老师所带的学生人数2 只列出老师age 为40 以下学生age 为12 以上的记录预备知识:1.sql 语句是对每一条记录依次处理,条件为真则执行动作(select,insert,delete,update)2.只要是迪卡尔积,就会产生“垃圾”信息,所以,只要迪卡尔积了,我们首先就要想到清除“垃圾”信息实验准备:drop table if exists tea_drop tabdrop tabcreate table teacher(teaID int primary key,name varchar(50),age int);create table student(stuID int primary key,name varchar(50),age int);create table tea_stu(teaID int references teacher(teaID),stuID int references student(stuID));insert into teacher values(1,'zxx',45), (2,'lhm',25) , (3,'wzg',26) , (4,'tg',27);insert into student values(1,'wy',11), (2,'dh',25) , (3,'ysq',26) , (4,'mxc',27);insert into tea_stu values(1,1), (1,2), (1,3);insert into tea_stu values(2,2), (2,3), (2,4);insert into tea_stu values(3,3), (3,4), (3,1);insert into tea_stu values(4,4), (4,1), (4,2) , (4,3);结果:2_3,3_2,4_331、什么是存储过程和如何编写41、注册Jdbc驱动程序的三种方式
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:

我要回帖

更多关于 绝地求生fps优化 的文章

 

随机推荐