天天看點

mysql多表随機查詢優化方案

本文主要談論如何實作Mysql的随機查詢,多表随機查詢。在Mysql中随機取出一條記錄的實作方法。

我們通常的查詢是沒有where或者where fields>2這樣的方式,這樣隻能取出在某種條件下的一條或多條,如果條件不變(例如2),那麼結果就一直不會有變化。

那麼如何實作随機查詢呢?本人有兩種方法。

查出來所有的記錄清單,然後array_rand()随機出一個結果的數組的key。連續的key可以使用mt_rand(1, count($list)); 為什麼不使用rand而是mt_rand呢?因為mt_rand币rand快4倍。

 這種情況下,查出整個清單,存入到Memcache的緩存或者Redis的NoSQL中,下次直接取出結果集而不需要查表。不過當資料量一旦超過萬級别,取出清單就很困難了。

MYSQL函數RAND(),産生一個0-1之間的小數,然後MAX(id)可以獲得該表中最大的ID。那麼MAX(id) * RAND()就可以取到表中所有的ID。OK,看語句。

既然MAX(id) * MAX(id)可以取到表裡所有值,那麼本語句的WHERE就可以取到本表的所有情況,那麼這就是一個所有記錄都有可能被取到的随機SQL語句。

mysql多表随機查詢優化方案

繼續閱讀