Klaus
SEO Cthulhu
еще раз о случайной выборке или ORDER BY RAND()
итак много было уже топиков на эту тему, однако идеального решения так и не было достигнуто.
Прежде всего хочется отметить, что такой запрос:
-------------------------------
SELECT *
FROM TABLE
ORDER BY RAND ()
LIMIT 1
-------------------------------
использовать НЕЛЬЗЯ!
Точнее можно, но только если записей мало или если Вы приветствуете тормоза Вашей системы.
И это при том, что это решение советуется во многих топиках, а также есть в мануале
Наиболее подходящее решение изложено в этом топике, но и оно далеко от идеала, т.к. правильно заметил Фанат , нет рандома если есть дырки.
Т.к. мне все же нужен рандом, то на данный момент я использую:
SELECT ID
FROM TABLE
ORDER BY RAND( )
LIMIT N
где ID - это PRIMARY с auto_increment, а потом уже идет выборка по этим ключам.
Но меня не устраивает общая скорость выборки в 1 сек, при моих 500к+ записей.
Вопрос: как, все же, получить номер записи, а не какой-нить auto_increment?
Т.е. допустим мы имеем 10 записей, но из-за многочисленного удаления и инсерта, мы имеем auto_increment номера - 13, 28, 548, 964 и т.д. Но если записей-то всего 10, то как получить седьмую запись или третью???
тогда бы уже со спокойной душой можно рандомить и брать по истиным номерам записей, а не по auto_increment.
итак много было уже топиков на эту тему, однако идеального решения так и не было достигнуто.
Прежде всего хочется отметить, что такой запрос:
-------------------------------
SELECT *
FROM TABLE
ORDER BY RAND ()
LIMIT 1
-------------------------------
использовать НЕЛЬЗЯ!
Точнее можно, но только если записей мало или если Вы приветствуете тормоза Вашей системы.
И это при том, что это решение советуется во многих топиках, а также есть в мануале
Наиболее подходящее решение изложено в этом топике, но и оно далеко от идеала, т.к. правильно заметил Фанат , нет рандома если есть дырки.
Т.к. мне все же нужен рандом, то на данный момент я использую:
SELECT ID
FROM TABLE
ORDER BY RAND( )
LIMIT N
где ID - это PRIMARY с auto_increment, а потом уже идет выборка по этим ключам.
Но меня не устраивает общая скорость выборки в 1 сек, при моих 500к+ записей.
Вопрос: как, все же, получить номер записи, а не какой-нить auto_increment?
Т.е. допустим мы имеем 10 записей, но из-за многочисленного удаления и инсерта, мы имеем auto_increment номера - 13, 28, 548, 964 и т.д. Но если записей-то всего 10, то как получить седьмую запись или третью???
тогда бы уже со спокойной душой можно рандомить и брать по истиным номерам записей, а не по auto_increment.