表A很简单,三个字段
id自增量
cat分类
content内容我想根据cat获取一条随机的记录,请问这个应该怎么写,表的记录数大概有10万条SELECT * FROM A where cat=2 ORDER BY rand() LIMIT 1这样效率太差,请问有别的办法吗?
id自增量
cat分类
content内容我想根据cat获取一条随机的记录,请问这个应该怎么写,表的记录数大概有10万条SELECT * FROM A where cat=2 ORDER BY rand() LIMIT 1这样效率太差,请问有别的办法吗?
解决方案 »
- 如果我要做个繁体站,数据库表的编码是不是用big5码的呢?
- (非常着急)请问IF语句能不能放在where里面
- Mysql
- 为什么我的RedHat8上装不上mysql?请帮我看看,谢谢了!
- mysql 的日期问题
- 在linux 下安装mysql出现如下错误
- mysql数据库导入与导出?(急用!在线等!)
- (在线等!)新网数据库怎么了?我装phpMyAdmin时出现这样的问题!Can't connect to local MySQL server through socket '/tmp/mysql.soc
- 大家帮忙看看如何将这个sql改成存储过程
- mysql 子查询sql怎么写
- PHP+MYSQL max min 与limit匹配的问题(急)
- 请问下现在mysql哪个版本较好?目前最新为5.5.28
不要改SQL语句了,
改系统配置参数,把key buffer, sort buffer调大些。
我后来计算出某个cat的总数,然后用limit x,1这样也是非常慢,这是什么原因?
如果只是随机排序,建议给他一个参数,效率不会那么差的。如下:
select * from tb_name order by rand(1200);
执行计划分析一下:explain select * from A where cat=2 order by rand() limit 1;
WHERE cat=2 and id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM A)-(SELECT MIN(id) FROM A)) + (SELECT MIN(id) FROM A)))
ORDER BY id LIMIT 1;
where cat=2
and ID> rand() * (select count(*) from A)
limit 1
这个稍微改一下就可以了
SELECT * FROM A
WHERE cat=2 and id >= (SELECT floor( RAND() * ((SELECT MAX(id) FROM A WHERE cat=2)-(SELECT MIN(id) FROM A WHERE cat=2)) + (SELECT MIN(id) FROM A WHERE cat=2)))
ORDER BY id LIMIT 1;多谢了。