2016-03-02 51 views
0

我有一個36米行的相當大的表。我想創建另一個表,其中包含隨機順序中的一列。MySQL:使用鎖從另一個表創建表

CREATE TABLE random_stamps AS SELECT time FROM cur_a order by rand(); 

問題是我超出了預期的鎖定表大小。我試圖鎖定表cur_a,但cur_a已鎖定,我無法創建另一個表。

我無法增加鎖表的大小,因爲我沒有對服務器的根訪問權限。

+0

行中數據庫表是默認的*無序*,你認爲插入順序決定了'SELECT'的輸出順序 - 你錯了 –

+0

你只用一個字段創建,也許你需要一個View? –

回答

0

我會加入另一列建議做你想要什麼:

CREATE TABLE random_stamps AS 
    SELECT time, rand() as rand 
    FROM cur_a; 

CREATE INDEX idx_random_stamps_rand ON random_stamps(rand, time); 

然後,當你取數據,你可以使用order by,這將使用索引:

SELECT rs.* 
FROM random_stamps rs 
ORDER BY rand; 
+0

該查詢仍超過鎖定大小表的大小。 – user3446746

+0

@ user3446746。 。 。你可能會覺得這很有趣:https://major.io/2010/01/29/mysql-the-total-number-of-locks-exceeds-the-lock-table-size/。 –