SQL语句查询问题,现在服务器mysql压力很大就是这句sql惹的祸

纵使有花兼明月何堪无酒亦无人 发布于 2013/01/20 13:27
阅读 1K+
收藏 1
SELECT `cms`.* FROM `cms_cms` as cms left join `cms_read` as cread on (1=2) where cms.`id` not in (select `wid` from cms_read where `zid`=2 and cms.cat=1 order by rand() limit 1
这是我写的MYSQL查询语句,这样写是为了一次查询完成,可是现在发现随着数据的增加,用这个查询语句非常耗时,并且加大了mysql的压力,希望大神指点一二!如何优化这个语句,希望还是可以一句查询完成!
加载中
0
古城痴人
古城痴人
使用索引试试。你的数据量有多少?
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
几十万!这几天一直在往里边添加数据,依据有了几十万了!刚写好时就几万,没有任何感觉,现在CPU一直很高,经过查询发现是这句的问题!
0
乌龟壳
乌龟壳

这条sql语句有点非主流哦,愣是没看出来这条sql想做什么,具体你们是什么业务我也不清楚,就不乱说了。

建议把子查询和主查询拆开,分别执行看看效果。

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
呵呵 确实很非主流!我自己写的一个推送文章的东西,不想推送重复的,想一次查询都搞定,之前没学过sql,看到一个join语句,我就比葫芦画瓢写了一个!不过随着数据变大,我的VPS受不了了!
0
JavaOlder
JavaOlder
用了左连接。首先看一下 是左边的表数据多。还是右变的表数据多。进行适当的调整~
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
恩 谢谢 我试试
0
回去干活
回去干活

mysql有工具可以验证是否使用了索引的.

注意索引基数.

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
已经建立索引了,速度只是比没建立索引前快一些,还是不行!
0
macgroup
macgroup

问题1,mysql的子查询性能不高,生产环境不建议使用。

问题2,使用了NOT IN ,这个语句效率也非常低。

问题3, order by rand(),这个语句效率也非常低。

问题4,语句不完整,让人没法看。

建议在程序中将这个查询分成几个语句来实现,速度和效率绝对比这一个语句高很多。

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
谢谢,准备分开写了
0
hulubo
hulubo

请告诉我,你的sql和下面的sql结果有什么不同。

SELECT `cms`.* FROM `cms_cms` as cms  where cms.`id` not in (select `wid` from cms_read where `zid`=2 and cms.cat=1) order by rand() limit 1


0
hulubo
hulubo

上面我只是想确定你那个外关联是多余的,居然真是这样,那么就把子选项改为外关联。你再看看结果。

SELECT `cms`.* FROM `cms_cms` as cms left join `cms_read` as cread on (`zid`=2 and cms.cat=1 and cms.`id`=cread.`wid`) where cread.`wid` is null order by rand() limit 1

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
谢谢,我很少用数据库中复杂的东西,一般接触的数据量也不大,这次这个,也是看了一个例子写的,么想到数据大了会有这么大的问题。这次长经验了
0
mark35
mark35

连表+ NOT IN 查询,mysql就一个死字

还不要说随机ORDER BY rand()

纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
恩,已经了解了
0
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
select cms.* from cms_cms as cms left join cms_read on (1=2) where cms.cat=3 and (select `wid` from cms_read where cms_read.`wid`=cms.`id` and cms_read.`zid`=15 limit 1)is null limit 1
0
上越
上越

引用来自“macgroup”的答案

问题1,mysql的子查询性能不高,生产环境不建议使用。

问题2,使用了NOT IN ,这个语句效率也非常低。

问题3, order by rand(),这个语句效率也非常低。

问题4,语句不完整,让人没法看。

建议在程序中将这个查询分成几个语句来实现,速度和效率绝对比这一个语句高很多。

同感,分开写反而更好
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
我现在改成上面那句了,比原来快多了。
返回顶部
顶部