数据库字段加了索引,使用web页面查询反而变慢

˙ꙫ˙+˙ꙫ˙ 2019-04-11 10:46:44
在username字段加了索引,然后通过页面查询,使用jmeter压测1个线程循环10分钟,最后结果TPS是5.5/s。
无索引时,同样压测方法,TPS是130/s。不清楚哪里出现问题,求解答
...全文
2862 55 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
55 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2019-04-26
  • 打赏
  • 举报
回复
引用 53 楼 可爱的姚大宝 的回复:
[quote=引用 52 楼 minsic78 的回复:] [quote=引用 51 楼 可爱的姚大宝 的回复:] [quote=引用 50 楼 minsic78 的回复:] [quote=引用 49 楼 可爱的姚大宝 的回复:] [quote=引用 48 楼 minsic78 的回复:] 楼主的这个问题还没解决吗。。。 如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。
我之前在前面已经说引起问题的原因了忘了结贴了[/quote] 啥原因?没看到啊[/quote] 问了一下开发人员 1、程序内没做username精确查询,like改成=,程序也不起作用 2、打印出来的username两边都带有%,前%会导致索引失效,这样的话,无论怎么查,索引都是失效的 现在就总结出这样的问题[/quote] 哦,原来说的是这,之前倒是看到了……[/quote] 开发现在也没时间解决,就暂且放在那了[/quote] 你可以参考下我36楼的方法。 或者你们可以把查询拆成两部分,一部分就是所有员工username和他对应的主键保存到redis这种缓存中,即使百万量级下,全部扫描一遍,也应该是秒出的,通过查到的主键再回到数据库去做关联什么的,这样也行。
˙ꙫ˙+˙ꙫ˙ 2019-04-26
  • 打赏
  • 举报
回复
引用 52 楼 minsic78 的回复:
[quote=引用 51 楼 可爱的姚大宝 的回复:]
[quote=引用 50 楼 minsic78 的回复:]
[quote=引用 49 楼 可爱的姚大宝 的回复:]
[quote=引用 48 楼 minsic78 的回复:]
楼主的这个问题还没解决吗。。。

如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。

我之前在前面已经说引起问题的原因了忘了结贴了[/quote]

啥原因?没看到啊[/quote]
问了一下开发人员
1、程序内没做username精确查询,like改成=,程序也不起作用
2、打印出来的username两边都带有%,前%会导致索引失效,这样的话,无论怎么查,索引都是失效的
现在就总结出这样的问题[/quote]

哦,原来说的是这,之前倒是看到了……[/quote]

开发现在也没时间解决,就暂且放在那了
minsic78 2019-04-26
  • 打赏
  • 举报
回复
引用 51 楼 可爱的姚大宝 的回复:
[quote=引用 50 楼 minsic78 的回复:] [quote=引用 49 楼 可爱的姚大宝 的回复:] [quote=引用 48 楼 minsic78 的回复:] 楼主的这个问题还没解决吗。。。 如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。
我之前在前面已经说引起问题的原因了忘了结贴了[/quote] 啥原因?没看到啊[/quote] 问了一下开发人员 1、程序内没做username精确查询,like改成=,程序也不起作用 2、打印出来的username两边都带有%,前%会导致索引失效,这样的话,无论怎么查,索引都是失效的 现在就总结出这样的问题[/quote] 哦,原来说的是这,之前倒是看到了……
˙ꙫ˙+˙ꙫ˙ 2019-04-26
  • 打赏
  • 举报
回复
引用 50 楼 minsic78 的回复:
[quote=引用 49 楼 可爱的姚大宝 的回复:]
[quote=引用 48 楼 minsic78 的回复:]
楼主的这个问题还没解决吗。。。

如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。

我之前在前面已经说引起问题的原因了忘了结贴了[/quote]

啥原因?没看到啊[/quote]
问了一下开发人员
1、程序内没做username精确查询,like改成=,程序也不起作用
2、打印出来的username两边都带有%,前%会导致索引失效,这样的话,无论怎么查,索引都是失效的
现在就总结出这样的问题
minsic78 2019-04-26
  • 打赏
  • 举报
回复
引用 49 楼 可爱的姚大宝 的回复:
[quote=引用 48 楼 minsic78 的回复:] 楼主的这个问题还没解决吗。。。 如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。
我之前在前面已经说引起问题的原因了忘了结贴了[/quote] 啥原因?没看到啊
˙ꙫ˙+˙ꙫ˙ 2019-04-26
  • 打赏
  • 举报
回复
引用 48 楼 minsic78 的回复:
楼主的这个问题还没解决吗。。。

如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。

我之前在前面已经说引起问题的原因了忘了结贴了
minsic78 2019-04-26
  • 打赏
  • 举报
回复
楼主的这个问题还没解决吗。。。 如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。
˙ꙫ˙+˙ꙫ˙ 2019-04-26
  • 打赏
  • 举报
回复
引用 46 楼 大脸猫o 的回复:
[quote=引用 45 楼 lizer2015 的回复:]
[quote=引用 42 楼 可爱的姚大宝 的回复:]
[quote=引用 41 楼 lizer2015 的回复:]
[quote=引用 20 楼 可爱的姚大宝的回复:]左面是有索引的执行计划,右面是无索引的执行计划,好像可以看出点问题

这个sys_department.id和sys_user.dept加索引了么[/quote]
没有 [/quote]那就加个索引就好了啊[/quote]建议把索引加到最里层,初始数据数据量越小越好。[/quote]
索引加到最里层的意思是?
˙ꙫ˙+˙ꙫ˙ 2019-04-26
  • 打赏
  • 举报
回复
引用 54 楼 minsic78 的回复:
[quote=引用 53 楼 可爱的姚大宝 的回复:]
[quote=引用 52 楼 minsic78 的回复:]
[quote=引用 51 楼 可爱的姚大宝 的回复:]
[quote=引用 50 楼 minsic78 的回复:]
[quote=引用 49 楼 可爱的姚大宝 的回复:]
[quote=引用 48 楼 minsic78 的回复:]
楼主的这个问题还没解决吗。。。

如果你要把双向模糊匹配在RDB中搞定的话,我在36楼的方法应该是你最后的选择了。

我之前在前面已经说引起问题的原因了忘了结贴了[/quote]

啥原因?没看到啊[/quote]
问了一下开发人员
1、程序内没做username精确查询,like改成=,程序也不起作用
2、打印出来的username两边都带有%,前%会导致索引失效,这样的话,无论怎么查,索引都是失效的
现在就总结出这样的问题[/quote]

哦,原来说的是这,之前倒是看到了……[/quote]

开发现在也没时间解决,就暂且放在那了[/quote]

你可以参考下我36楼的方法。

或者你们可以把查询拆成两部分,一部分就是所有员工username和他对应的主键保存到redis这种缓存中,即使百万量级下,全部扫描一遍,也应该是秒出的,通过查到的主键再回到数据库去做关联什么的,这样也行。[/quote]

行 我试一下
大脸猫o 2019-04-24
  • 打赏
  • 举报
回复
引用 45 楼 lizer2015 的回复:
[quote=引用 42 楼 可爱的姚大宝 的回复:]
[quote=引用 41 楼 lizer2015 的回复:]
[quote=引用 20 楼 可爱的姚大宝的回复:]左面是有索引的执行计划,右面是无索引的执行计划,好像可以看出点问题

这个sys_department.id和sys_user.dept加索引了么[/quote]
没有 [/quote]那就加个索引就好了啊[/quote]建议把索引加到最里层,初始数据数据量越小越好。
lizer2015 2019-04-21
  • 打赏
  • 举报
回复
引用 42 楼 可爱的姚大宝 的回复:
[quote=引用 41 楼 lizer2015 的回复:] [quote=引用 20 楼 可爱的姚大宝的回复:]左面是有索引的执行计划,右面是无索引的执行计划,好像可以看出点问题
这个sys_department.id和sys_user.dept加索引了么[/quote] 没有 [/quote]那就加个索引就好了啊
顺势而为1 2019-04-18
  • 打赏
  • 举报
回复
引用 43 楼 可爱的姚大宝 的回复:
[quote=引用 40 楼 顺势而为1 的回复:] 这样写试试看


select * 
from (select tmp.*,rownum row_id 
      from (select t.* 
	        from (select * from sys_user where t.username like 'username' and t.userMgrType <> 10 and  t.deleted = 2 ) t 
			    join sys_department deptObj on t.dept = deptObj.id 
			where (deptObj.path like '部门path')
		    order by t.ordernum asc) tmp  
	   where rownum <= 10 ) 
where row_id > 0;


提示 ora-00904 T.DELETED 标识符无效[/quote]


select * 
from (select tmp.*,rownum row_id 
      from (select t.* 
	        from (select * from sys_user where username like 'username' and userMgrType <> 10 and  deleted = 2 ) t 
			    join sys_department deptObj on t.dept = deptObj.id 
			where (deptObj.path like '部门path')
		    order by t.ordernum asc) tmp  
	   where rownum <= 10 ) 
where row_id > 0;

˙ꙫ˙+˙ꙫ˙ 2019-04-15
  • 打赏
  • 举报
回复
引用 40 楼 顺势而为1 的回复:
这样写试试看


select *
from (select tmp.*,rownum row_id
from (select t.*
from (select * from sys_user where t.username like 'username' and t.userMgrType <> 10 and t.deleted = 2 ) t
join sys_department deptObj on t.dept = deptObj.id
where (deptObj.path like '部门path')
order by t.ordernum asc) tmp
where rownum <= 10 )
where row_id > 0;



提示 ora-00904 T.DELETED 标识符无效
˙ꙫ˙+˙ꙫ˙ 2019-04-15
  • 打赏
  • 举报
回复
引用 41 楼 lizer2015 的回复:
[quote=引用 20 楼 可爱的姚大宝的回复:]左面是有索引的执行计划,右面是无索引的执行计划,好像可以看出点问题

这个sys_department.id和sys_user.dept加索引了么[/quote]
没有
lizer2015 2019-04-14
  • 打赏
  • 举报
回复
引用 20 楼 可爱的姚大宝的回复:
左面是有索引的执行计划,右面是无索引的执行计划,好像可以看出点问题
这个sys_department.id和sys_user.dept加索引了么
顺势而为1 2019-04-13
  • 打赏
  • 举报
回复
这样写试试看


select * 
from (select tmp.*,rownum row_id 
      from (select t.* 
	        from (select * from sys_user where t.username like 'username' and t.userMgrType <> 10 and  t.deleted = 2 ) t 
			    join sys_department deptObj on t.dept = deptObj.id 
			where (deptObj.path like '部门path')
		    order by t.ordernum asc) tmp  
	   where rownum <= 10 ) 
where row_id > 0;


刀疤l 2019-04-13
  • 打赏
  • 举报
回复
查询并没有得到优化,可以把条件写在最里层,一层层嵌套出来,即使没有索引也会很快
bug阿哥 2019-04-12
  • 打赏
  • 举报
回复
explain试试
˙ꙫ˙+˙ꙫ˙ 2019-04-12
  • 打赏
  • 举报
回复
左面是有索引的执行计划,右面是无索引的执行计划,好像可以看出点问题
˙ꙫ˙+˙ꙫ˙ 2019-04-12
  • 打赏
  • 举报
回复
引用 18 楼 yaiger 的回复:
看不全
[quote=引用 17 楼 可爱的姚大宝 的回复:]
这个是在eclipse里打印出的sql
[/quote]
sql语句我上面已经写了,这里是username字段
加载更多回复(35)

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧