【问题标题】:random row query optimization in innodb tableinnodb 表中的随机行查询优化
【发布时间】:2010-03-04 23:18:02
【问题描述】:
$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?

提前致谢!
亚瑟

【问题讨论】:

    标签: mysql optimization


    【解决方案1】:

    这对你不起作用?

    SELECT * FROM t_table ORDER BY RAND() LIMIT 1
    

    【讨论】:

    • 这是我的第一次尝试,但表变大了,我不得不用问题上的查询替换它
    【解决方案2】:

    "SELECT * FROM t_table ORDER BY RAND() LIMIT 1"

    这不行,因为mySQL会检查所有符合条件的行(这里没有条件,所以会取所有行)他们会复制临时表中的行,然后随机选择一行

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2019-01-01
      • 2011-02-18
      相关资源
      最近更新 更多