楼主: cyt2005

帮忙mysql 语句调优

[复制链接]
论坛徽章:
52
2015年新春福章
日期:2015-03-06 11:57:312012新春纪念徽章
日期:2012-02-13 15:12:252012新春纪念徽章
日期:2012-02-13 15:12:25生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:33:22生肖徽章2007版:龙
日期:2012-02-07 10:32:552012新春纪念徽章
日期:2012-02-07 09:59:35
41#
发表于 2008-1-22 10:11 | 只看该作者
原帖由 anlinew 于 2008-1-22 10:01 发表
[
这种设计方式的后果:
1、数据库层扫描大量的数据,耗费大量数据库资源
2、传输给应用层,耗费大量网络资源
3、应用层排序、筛选,耗费大量应用服务器资源


实际上你只要在数据库层的sql做好分页,每次只取所需即可


前三我站同..........之前的贴我也提到了....


但是 "sql做好分页"  对提高查询语句有什么效果嘛.....那只能用来控制显示的...

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
42#
发表于 2008-1-22 10:14 | 只看该作者
原帖由 jinguanding 于 2008-1-22 09:59 发表




呵呵...两位看来是经验丰富者啊........所以我建议LZ创建联合索引.......表的设计与数据已经存在..估计叫LZ改是不现实的...

对于只有1,2,3,4这几种散列的值单独创建索引是效果不一定好的(可能加快了 Select,而insert与update的开销更大,其实效果可能抵消掉了)....
不修改程序处理方式的话........只能创建联合索引...小弟给LZ的建议就这样...

如果不改程序,我的建议是删掉索引(oracle),除非你有需要访问那剩下的10%

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
43#
发表于 2008-1-22 10:19 | 只看该作者
原帖由 jinguanding 于 2008-1-22 10:11 发表


前三我站同..........之前的贴我也提到了....


但是 "sql做好分页"  对提高查询语句有什么效果嘛.....那只能用来控制显示的...

mysql 的limit、oracle 的rownum< 、mssql 的top n以及db2 的 fetch first是分页算法常用的方法
利用好这个功能,其key stop算法可以大量减少实际访问的数据块

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
44#
发表于 2008-1-22 10:29 | 只看该作者
性能优化的终极目标是
  提高响应时间

时间的公式是这样的 T=S工作量/V工作速度

那么减小T就有两个方法:
一、减小S  二、增大V

一、减小S的方法:通过索引减少所需访问的块,等

二、增大V的方法:并行处理,内存处理,提高IO能力等

写着玩儿。。。

[ 本帖最后由 anlinew 于 2008-1-22 10:41 编辑 ]

使用道具 举报

回复
论坛徽章:
14
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:鸡
日期:2009-10-29 16:15:30生肖徽章2007版:兔
日期:2009-04-14 19:32:34生肖徽章2007版:猴
日期:2008-11-28 10:39:32奥运会纪念徽章:摔跤
日期:2008-08-12 10:59:32奥运会纪念徽章:艺术体操
日期:2008-08-07 09:43:42奥运会纪念徽章:举重
日期:2008-05-04 17:12:35生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53
45#
 楼主| 发表于 2008-1-22 11:11 | 只看该作者
呵呵
我也觉得既然返回数据量这么大还不如全表扫描得了
这个sql的作用是显示所有的代办信息,
在前台多了分页处理
但是唯独这个sql前台想让他全部显示出来所以 LIMIT 0, 2147483647 他limit了一个无穷大的数为了全显
至于表的设计上的问题,这个我想很多时候大家都是无可奈何的吧,没有办法重新设计

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
46#
发表于 2008-1-22 11:18 | 只看该作者
原帖由 cyt2005 于 2008-1-22 11:11 发表
呵呵
我也觉得既然返回数据量这么大还不如全表扫描得了
这个sql的作用是显示所有的代办信息,
在前台多了分页处理
但是唯独这个sql前台想让他全部显示出来所以 LIMIT 0, 2147483647 他limit了一个无穷大的数为了全显
至于表的设计上的问题,这个我想很多时候大家都是无可奈何的吧,没有办法重新设计

这个不是表设计的问题,应该算业务设计的问题

前台如果要全部显示的话也不应该每次都去扫描全部

信息数据是有生命周期的,对于你的表里的数据,大量数据应该是不活跃的,这类数据应该在前台生成静态页面
显示全部实际上是显示当前活跃数据加上直接调用的前期静态数据

使用道具 举报

回复
论坛徽章:
14
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:鸡
日期:2009-10-29 16:15:30生肖徽章2007版:兔
日期:2009-04-14 19:32:34生肖徽章2007版:猴
日期:2008-11-28 10:39:32奥运会纪念徽章:摔跤
日期:2008-08-12 10:59:32奥运会纪念徽章:艺术体操
日期:2008-08-07 09:43:42奥运会纪念徽章:举重
日期:2008-05-04 17:12:35生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53
47#
 楼主| 发表于 2008-1-22 11:24 | 只看该作者
原帖由 jinguanding 于 2008-1-22 09:59 发表




呵呵...两位看来是经验丰富者啊........所以我建议LZ创建联合索引.......表的设计与数据已经存在..估计叫LZ改是不现实的...

对于只有1,2,3,4这几种散列的值单独创建索引是效果不一定好的(可能加快了 Select,而insert与update的开销更大,其实效果可能抵消掉了)....
不修改程序处理方式的话........只能创建联合索引...小弟给LZ的建议就这样...



经常用的俩个字段
AND bo_inst.submit_flag = 1
AND bo_inst.save_flag = 1
联合起来也就能过滤掉10%的数据
所以选择性还是不好

使用道具 举报

回复
论坛徽章:
14
会员2007贡献徽章
日期:2007-09-26 18:42:10生肖徽章2007版:鸡
日期:2009-10-29 16:15:30生肖徽章2007版:兔
日期:2009-04-14 19:32:34生肖徽章2007版:猴
日期:2008-11-28 10:39:32奥运会纪念徽章:摔跤
日期:2008-08-12 10:59:32奥运会纪念徽章:艺术体操
日期:2008-08-07 09:43:42奥运会纪念徽章:举重
日期:2008-05-04 17:12:35生肖徽章2007版:鼠
日期:2008-01-02 17:35:53生肖徽章2007版:牛
日期:2008-01-02 17:35:53生肖徽章2007版:虎
日期:2008-01-02 17:35:53
48#
 楼主| 发表于 2008-1-22 11:28 | 只看该作者
原帖由 anlinew 于 2008-1-22 11:18 发表

这个不是表设计的问题,应该算业务设计的问题

前台如果要全部显示的话也不应该每次都去扫描全部

信息数据是有生命周期的,对于你的表里的数据,大量数据应该是不活跃的,这类数据应该在前台生成静态页面
显示全部实际上是显示当前活跃数据加上直接调用的前期静态数据



我还想把不同的根据不同flag,把表拆分然后拆分的表建立主键id
看来病根不在于此啊?

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
71
马上加薪
日期:2014-02-19 11:55:14蜘蛛蛋
日期:2012-12-26 18:16:01茶鸡蛋
日期:2012-11-16 08:12:48ITPUB 11周年纪念徽章
日期:2012-10-09 18:05:07奥运会纪念徽章:网球
日期:2012-08-23 14:58:08奥运会纪念徽章:沙滩排球
日期:2012-07-19 17:28:14版主2段
日期:2012-07-07 02:21:02咸鸭蛋
日期:2012-03-23 18:17:482012新春纪念徽章
日期:2012-02-13 15:13:512012新春纪念徽章
日期:2012-02-13 15:13:51
49#
发表于 2008-1-22 11:39 | 只看该作者
原帖由 cyt2005 于 2008-1-22 11:11 发表
呵呵
我也觉得既然返回数据量这么大还不如全表扫描得了
这个sql的作用是显示所有的代办信息,
在前台多了分页处理
但是唯独这个sql前台想让他全部显示出来所以 LIMIT 0, 2147483647 他limit了一个无穷大的数为了全显
至于表的设计上的问题,这个我想很多时候大家都是无可奈何的吧,没有办法重新设计

最终显示到页面的数据有多少?
几万,有点儿过分吧
业务的实际需求是什么

[ 本帖最后由 anlinew 于 2008-1-22 11:46 编辑 ]

使用道具 举报

回复
论坛徽章:
41
ITPUB元老
日期:2007-04-18 10:10:372012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:232012新春纪念徽章
日期:2012-02-13 15:09:23迷宫蛋
日期:2012-05-09 13:09:18双黄蛋
日期:2013-01-21 12:55:59马上有车
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14
50#
发表于 2008-1-22 12:22 | 只看该作者
原帖由 cyt2005 于 2008-1-22 11:11 发表
呵呵
我也觉得既然返回数据量这么大还不如全表扫描得了
这个sql的作用是显示所有的代办信息,
在前台多了分页处理
但是唯独这个sql前台想让他全部显示出来所以 LIMIT 0, 2147483647 他limit了一个无穷大的数为了全显
至于表的设计上的问题,这个我想很多时候大家都是无可奈何的吧,没有办法重新设计



显示几万行,页面受得了不,更别说可读性了。


为什么要显示无穷大?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表