2017-02-19 22 views
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"); 

Какое оптимальное решение для выбора случайных строк для данного конкретного запроса?

+0

Не могли бы вы сначала сгенерировать список случайных чисел, а затем выбрать только те строки, которые содержатся в вашем списке (например, возможно, присоединив его к #rownum или некоторому такому). Таким образом, вы на самом деле ничего не сортируете. (Генерирование списка случайных чисел адресуется здесь: http://stackoverflow.com/questions/1045138/how-do-i-generate-random-number-for-each-row-in-a-tsql-select) – johnjps111

ответ

1

В зависимости от ваших подробных требований существует несколько более быстрых подходов в here Ничего не «идеально», но каждый, вероятно, «достаточно хорош».

 Смежные вопросы

  • Нет связанных вопросов^_^