$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?
提前致谢!
亚瑟
答案 0 :(得分:0)
这对你不起作用?
SELECT * FROM t_table ORDER BY RAND() LIMIT 1