楼主: cyt2005

帮忙mysql 语句调优

[复制链接]
论坛徽章:
0
31#
发表于 2008-1-21 18:13 | 只看该作者
要降低查询优化的影响的话,在MySQL中还有个方法是自己安排好join顺序,然后用straight_join让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
32#
发表于 2008-1-21 18:18 | 只看该作者
这个方法还是建议不要用..可能某个时候是正确的..但是当记录发生了变化的情况下...就效果不一样了..还是让查询优化器自己处理比较好....

使用道具 举报

回复
论坛徽章:
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
33#
 楼主| 发表于 2008-1-22 08:50 | 只看该作者
建立联合索引又要考虑前缀
index(a,b)
如果where先出现 b=***那么这个索引就失效了吧,而且目前我的这个应用里面就有这么个情况
我想问,加入我建立了index(a,b),然后在建立index(b)
这样好不好呢?会有什么问题呢?

使用道具 举报

回复
论坛徽章:
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
34#
发表于 2008-1-22 09:23 | 只看该作者
应该没什么问题....就是增加索引的存储空间....已经insert的时候多做点事情....update更新到该字段的时候也需要多做点事情...


建议使用联合索引的时候.写语句要有意加上括号 ()

使用道具 举报

回复
论坛徽章:
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
35#
 楼主| 发表于 2008-1-22 09:36 | 只看该作者
晕死
之前用到的
AND bo_inst.submit_flag = 1
  AND bo_inst.save_flag = 1
即使这俩个字段一起筛选,也只能过滤掉10%的数据
90%的数据都集中在这里
这可咋办啊

使用道具 举报

回复
论坛徽章:
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
36#
发表于 2008-1-22 09:44 | 只看该作者
原帖由 cyt2005 于 2008-1-22 08:50 发表
建立联合索引又要考虑前缀
index(a,b)
如果where先出现 b=***那么这个索引就失效了吧,而且目前我的这个应用里面就有这么个情况
我想问,加入我建立了index(a,b),然后在建立index(b)
这样好不好呢?会有什么问题呢?



那你可以这么建index(b,a)啊!

你的条件过滤不了几条数据,那你这个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
37#
发表于 2008-1-22 09:50 | 只看该作者
此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
38#
发表于 2008-1-22 09:51 | 只看该作者
这条语句根本问题应该是没有高选择性的条件
这样的语句无论怎么优化,随着数据量的增大最终也只有死路一条
其实际得到的数据量很大,需要扫描的数据块也无法降低

使用道具 举报

回复
论坛徽章:
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
39#
发表于 2008-1-22 09:59 | 只看该作者
原帖由 anlinew 于 2008-1-22 09:51 发表
这条语句根本问题应该是没有高选择性的条件
这样的语句无论怎么优化,随着数据量的增大最终也只有死路一条
其实际得到的数据量很大,需要扫描的数据块也无法降低




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

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

使用道具 举报

回复
招聘 : 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
40#
发表于 2008-1-22 10:01 | 只看该作者
[
原帖由 anlinew 于 2008-1-22 09:51 发表
这条语句根本问题应该是没有高选择性的条件
这样的语句无论怎么优化,随着数据量的增大最终也只有死路一条
其实际得到的数据量很大,需要扫描的数据块也无法降低

这种设计方式的后果:
1、数据库层扫描大量的数据,耗费大量数据库资源
2、传输给应用层,耗费大量网络资源
3、应用层排序、筛选,耗费大量应用服务器资源


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

使用道具 举报

回复

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

本版积分规则 发表回复

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