2
У меня довольно большой sql-запрос, которому нужно выбрать случайные строки, но поскольку таблица большая, порядок по rand() занимает очень много времени.Получите случайные строки, но не с ORDER BY RAND() MariaDB
$getdata = $this->db->query("
SELECT DISTINCT property.id,property.unid,property.imported,property.userid,
CONCAT(user.firstname) as username,property.url,
IFNULL(user.thumbpic,'temp/misc/noimage.png') as profilepic,
property.bedrooms,property.beds,type.meta_val as type,property.accommodates,property.price,
IFNULL((select thumbimg from tblpropertyimages where pid=property.id limit 1),'temp/misc/noimage.png') as image,
property.name as propertyname,(select sum(rating) from tblreviews where pid=property.id) as totalrating,
(select count(id) from tblreviews where pid=property.id) as countratings,
location.name as cityname from tblproperty as property join tbluser as user on property.userid=user.id
join tblcommon as type on property.type=type.id
left join tblpropertyamenities as p_amenities on property.id=p_amenities.pid
join tbllocation as location on location.id=property.city
WHERE property.status='Active' and user.status='Active'
$home $q limit $limit offset $start");
Какое оптимальное решение для выбора случайных строк для данного конкретного запроса?
Не могли бы вы сначала сгенерировать список случайных чисел, а затем выбрать только те строки, которые содержатся в вашем списке (например, возможно, присоединив его к #rownum или некоторому такому). Таким образом, вы на самом деле ничего не сортируете. (Генерирование списка случайных чисел адресуется здесь: http://stackoverflow.com/questions/1045138/how-do-i-generate-random-number-for-each-row-in-a-tsql-select) – johnjps111