innodb表中的随机行查询优化

时间:2010-03-04 23:18:03

标签: mysql optimization

$offset = SELECT FLOOR(RAND() * COUNT(*)) FROM t_table
SELECT * FROM t_table WHERE LIMIT $offset,1

这在 myisam 中运行良好,但我想将此表更改为 innodb (所有其他数据库表都是innodb)以利用外键并避免使用表等级锁定。

此表的primaryId字段是VARCHAR(10)

我不能“强制”使用数字autoinc Id,因为记录会一直被删除/添加,并且RANDOM(MIN(Id),MAX(Id))预测可能会错过很多次。

如何将此查询优化为innodb?

提前致谢!
亚瑟

1 个答案:

答案 0 :(得分:0)

这对你不起作用?

SELECT * FROM t_table ORDER BY RAND() LIMIT 1