免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3677 | 回复: 4

怎么优化这个查询语句啊 [复制链接]

论坛徽章:
0
发表于 2010-02-23 18:12 |显示全部楼层
select a.UserID as UserID,a.UserName as UserName,a.Gender as Gender,a.Age as Age,a.Marriage as Marriage,a.income as income,             a.city as city,a.Telephone as Telephone,a.channel as channel,a.visitorID as visitorID,a.CreateTime as CreateTime,a.XPID as xpId,b.Code as Code,                 c.effective as effective,c.excellent as excellent,c.sale as sale,c.success as success,c.amount as amount,c.successTime as successTime           from tab_Xpinfo as a left join tab_Markitinfo as b on a.VisitorID = b.vid left join detailClue as c on a.XPID=c.XPID            where to_days(a.createTime) BETWEEN to_days(SUBDATE(now(),7)) and to_days(SUBDATE(now(),1))             order by a.createTime DESC limit 0,20;


建那些字段的索引啊

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
发表于 2010-02-24 08:49 |显示全部楼层
这也太难看了

格式化一下吧

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
发表于 2010-02-24 08:57 |显示全部楼层
我帮楼主格式化下语句
  1. select a.UserID as UserID,a.UserName as UserName,a.Gender as Gender,a.Age as Age,a.Marriage as Marriage,a.income as income, a.city as city,a.Telephone as Telephone,a.channel as channel,a.visitorID as visitorID,a.CreateTime as CreateTime,a.XPID as xpId,b.Code as Code, c.effective as effective,c.excellent as excellent,c.sale as sale,c.success as success,c.amount as amount,c.successTime as successTime
  2. from tab_Xpinfo as a left join tab_Markitinfo as b on a.VisitorID = b.vid
  3.                                                left join detailClue as c on a.XPID=c.XPID
  4.             where to_days(a.createTime) BETWEEN to_days(SUBDATE(now(),7)) and to_days(SUBDATE(now(),1))   
  5.             order by a.createTime DESC
  6.             limit 0,20;
复制代码

论坛徽章:
0
发表于 2010-02-25 22:06 |显示全部楼层
索引就是XPID和createTime联合索引,但这种带有日期函数的是无法使用索引的。解决办法是在应用层把条件区间算出来而不是使用mysql的日期函数。

论坛徽章:
9
每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00每日论坛发贴之星
日期:2016-01-04 06:20:00数据库技术版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00IT运维版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00综合交流区版块每日发帖之星
日期:2016-01-04 06:20:00数据库技术版块每周发帖之星
日期:2016-03-07 16:30:25
发表于 2010-02-25 22:26 |显示全部楼层
还算比较简单,在createtime上加索引。然后把where条件更改如下:

where a.createTime BETWEEN
DATE_FORMAT(SUBDATE(now(),7)), '%Y-%m-%d %H:%i:%s')
and
DATE_FORMAT(SUBDATE(now(),1)), '%Y-%m-%d %H:%i:%s')           
order by a.createTime DESC limit 0,20;

简单的说就是避免在列上面做函数操作
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP