Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Misha v.3 02.10.2002 17:36
Может кому потребуется...This is useful to get a random sample of a set SELECT * FROM table1,table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000я не долго думая написал аналогично. КакогО же было мое удивление, когда запрос выполнялся несколько секунд...
| table | ALL | 60236 | Using temporary; Using filesort |Переписал так:
$cnt(^int:sql{SELECT CEILING(RAND()*COUNT(*)) FROM table}[$.default{0}]) $rec[^table::sql{SELECT field_list FROM table}[$.offset($cnt)$.limit(1)]]explain стал показывать, что будут использоваться индексы и все залетало...
You can't use a column with RAND() values in an ORDER BY clause, because ORDER BY would evaluate the column multiple times. In MySQL Version 3.23, you can, however, do: SELECT * FROM table_name ORDER BY RAND()Так-же нашел упоминание об ALTER TABLE ... ORDER BY col1, col2... которое раньше почему-то упустил (это стОит делать после изменений в табличке если в основном данные достаются из нее, и обычно сортируются именно в этом порядке)