求sql 查询语句加where 和 ORDER BY 后耗时优化 50
网站下的某数据表,数据量才7万条,houseid为主键,infocat有索引,基数为5,加了一个简单的where和ORDERBY(时间字段)查询时间需要几百毫秒,感觉慢了...
网站下的某数据表,数据量才7万条,houseid为主键,infocat有索引,基数为5,加了一个简单的where 和 ORDER BY (时间字段)查询时间需要几百毫秒,感觉慢了,求优化语句,具体测试如下。
不加任何条件
SELECT houseid FROM `h_house` ORDER BY houseid DESC LIMIT 0,30;
SELECT houseid FROM `h_house` ORDER BY houseid DESC LIMIT 0,300;
//耗时: 0.001s //耗时: 0.002s
1、SELECT houseid FROM `h_house` WHERE infocat=1 ORDER BY houseid DESC LIMIT 0,30; // 耗时: 0.31s
2、SELECT houseid FROM `h_house` ORDER BY edittime DESC LIMIT 0,30;
//耗时: 0.32s
3、SELECT houseid FROM `h_house` WHERE infocat=1 ORDER BY houseid DESC LIMIT 0,30; //耗时: 0.31s
对sql数据库比较熟悉的,请给个优化语句,sql查询时间在几十毫秒内,谢谢!
infocat是有索引的(才5个),查询耗时300多毫秒,结果我把infocat索引去掉了,速度就正常了。
SELECT houseid FROM `h_house` WHERE infocat=1 ORDER BY houseid DESC LIMIT 0,30; // 去掉infocat索引 ,耗时: 0.002s 展开
不加任何条件
SELECT houseid FROM `h_house` ORDER BY houseid DESC LIMIT 0,30;
SELECT houseid FROM `h_house` ORDER BY houseid DESC LIMIT 0,300;
//耗时: 0.001s //耗时: 0.002s
1、SELECT houseid FROM `h_house` WHERE infocat=1 ORDER BY houseid DESC LIMIT 0,30; // 耗时: 0.31s
2、SELECT houseid FROM `h_house` ORDER BY edittime DESC LIMIT 0,30;
//耗时: 0.32s
3、SELECT houseid FROM `h_house` WHERE infocat=1 ORDER BY houseid DESC LIMIT 0,30; //耗时: 0.31s
对sql数据库比较熟悉的,请给个优化语句,sql查询时间在几十毫秒内,谢谢!
infocat是有索引的(才5个),查询耗时300多毫秒,结果我把infocat索引去掉了,速度就正常了。
SELECT houseid FROM `h_house` WHERE infocat=1 ORDER BY houseid DESC LIMIT 0,30; // 去掉infocat索引 ,耗时: 0.002s 展开
1个回答
展开全部
目测题主写出的这几条语句未发现特别消耗系统资源的运算,都是一些规范的写法,可以说没有什么可以优化的,如果需要让它们运行的更快一些应该从设置索引这个方向去解决。
最前两条语句无筛选、用字段`houseid`排序运算,毫秒级耗时都非常快,该字段应该建立了索引并被利用。
语句1. 用字段infocat=1进行筛选,尽管还是用字段`houseid`排序运算,但是耗时立即增加到数百毫秒级,显然字段`infocat`没有可被利用的索引。建议为字段infocat添加索引,这样相信此语句的运行速度会大幅提高。
语句2. 用字段`edittime`排序,无筛选,耗时较用字段`houseid`排序的耗时从毫秒级大幅增加到3百多毫秒,显然字段`edittime`也无可利用的索引。如为此字段添加索引,此语句的运行速度可提高一个数量级。
语句3跟语句1.情况一样,如果字段`infocat`有索引,其运行速度可大幅提高。如果筛选后返回的行特别多,那么再为字段`edittime`加索引可为提高运行速度加分(筛选后如返回的行数目有限,则字段`edittime`有无索引对提高速度帮助作用不大)。
最前两条语句无筛选、用字段`houseid`排序运算,毫秒级耗时都非常快,该字段应该建立了索引并被利用。
语句1. 用字段infocat=1进行筛选,尽管还是用字段`houseid`排序运算,但是耗时立即增加到数百毫秒级,显然字段`infocat`没有可被利用的索引。建议为字段infocat添加索引,这样相信此语句的运行速度会大幅提高。
语句2. 用字段`edittime`排序,无筛选,耗时较用字段`houseid`排序的耗时从毫秒级大幅增加到3百多毫秒,显然字段`edittime`也无可利用的索引。如为此字段添加索引,此语句的运行速度可提高一个数量级。
语句3跟语句1.情况一样,如果字段`infocat`有索引,其运行速度可大幅提高。如果筛选后返回的行特别多,那么再为字段`edittime`加索引可为提高运行速度加分(筛选后如返回的行数目有限,则字段`edittime`有无索引对提高速度帮助作用不大)。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询