苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 4522|回复: 6

[其他] 求帮把SQL语句优化一下

[复制链接]
发表于 2013-7-11 11:02:39 | 显示全部楼层 |阅读模式
我的数据库表中有125万多条记录,我想随机取出40条记录,但是用rand()的话,效率超级低,后面通过先随机产生70个ID,因为取出的70个ID对应的记录的type字段不一定等5,所以本来应该生产40个ID就可以了的,这里只能多取一些。
我的代码如下,哪位高手帮优化一下啊?type和id都是索引的
[code=php]
$itemi = "";
for($i=1;$i<70;$i++){
$itemi .= ($i==1 ? "" :",").mt_rand(1,1253106);
}
$sql = "select `id`,`name`,`dirurl`,`type` from `-table-keylist` where `type`=5 and `id` in('".str_replace(",","','",$itemi)."') limit 0,40";
[/code]


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2013-7-11 11:31:04 | 显示全部楼层
SELECT TOP 40 * FROM TBALE ORDER BY NEWID()
发表于 2013-7-11 11:32:16 | 显示全部楼层
或者 select   top   10   *,newid()   as   Random   from   Table where。。。order,。。
 楼主| 发表于 2013-7-11 11:47:46 | 显示全部楼层
采星 发表于 2013-7-11 11:31
SELECT TOP 40 * FROM TBALE ORDER BY NEWID()

不知道为什么按你这样说的去做调不出数据
发表于 2013-7-11 13:03:38 | 显示全部楼层
myde520 发表于 2013-7-11 11:47
不知道为什么按你这样说的去做调不出数据

SELECT TOP 40 * FROM tablename ORDER BY NEWID()
这样写是可以的吧,我测试过没有问题

 楼主| 发表于 2013-7-11 15:49:48 | 显示全部楼层
站长苏飞 发表于 2013-7-11 13:03
SELECT TOP 40 * FROM tablename ORDER BY NEWID()
这样写是可以的吧,我测试过没有问题

忘记说我的是Mysql数据库了
发表于 2013-7-11 15:52:02 | 显示全部楼层
mysql不能执行我的语句吗?你看思路,我是手写的,具体 的你再着安这个修改就行了,不行就用子查询
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-12-27 03:22

© 2014-2021

快速回复 返回顶部 返回列表