Другим простым решением было бы ранжирование строк и выборка одного из них случайным образом, и с помощью этого решения вам не нужно будет иметь столбец «Id» в таблице.
SELECT d.* FROM (
SELECT t.*, @rownum := @rownum + 1 AS rank
FROM mytable AS t,
(SELECT @rownum := 0) AS r,
(SELECT @cnt := (SELECT RAND() * (SELECT COUNT(*) FROM mytable))) AS n
) d WHERE rank >= @cnt LIMIT 10;
Вы можете измените предельное значение в соответствии с вашей потребностью на доступ к столько строк, сколько хотите, но это будет главным образом последовательными значениями.
Однако, если вам не нужны последовательные случайные значения, вы можете получить более крупный образец и выберите случайным образом из него. что-то вроде ...
SELECT * FROM (
SELECT d.* FROM (
SELECT c.*, @rownum := @rownum + 1 AS rank
FROM buildbrain.`commits` AS c,
(SELECT @rownum := 0) AS r,
(SELECT @cnt := (SELECT RAND() * (SELECT COUNT(*) FROM buildbrain.`commits`))) AS rnd
) d
WHERE rank >= @cnt LIMIT 10000
) t ORDER BY RAND() LIMIT 10;