2010-03-04 119 views
0
$offset = SELECT FLOOR(RAND() * COUNT(*)) FROM t_table 
SELECT * FROM t_table WHERE LIMIT $offset,1 

的MyISAM的偉大工程,但我想這個表更改爲InnoDB的(所有其他數據庫表是InnoDB的)拿外國鍵的優點,避免表級別鎖定。隨機行查詢優化

此表的primaryId字段是VARCHAR(10)

我不能「強制」數字AUTOINC標識,因爲記錄被刪除/添加了所有的時間和隨機(MIN(ID) MAX(Id))預測可能會錯過很多次。

我該如何優化這個查詢到innodb?

在此先感謝!
Arthur

回答

0

這不適合你嗎?

SELECT * FROM t_table ORDER BY RAND() LIMIT 1 
+0

這是我第一次嘗試,但表變得更大,我不得不用問題上的查詢替換它 – arthurprs 2010-03-04 23:23:26

0

「SELECT * FROM t_table ORDER BY RAND()LIMIT 1」

這是行不通的,因爲MySQL將檢查所有誰符合條件(在這裏沒有條件的行,因此將採取一切行),他們將複製臨時表中的行,然後將選擇一個隨機行