Mysql
我們如何設計最佳優化解決方案:生成巨大的隨機數並在數據庫表中檢查這些數字是否存在
我們有一張桌子,例如:
表名:
random_number_series
其列如下:
number [numeric(10)] name [varchar(10)] status [tinyint(1)] type [tinyint(1)] createdDate [datetime]
該表有大約 250-3 億行。
現在我們的要求是我們將生成大量的隨機數,即 100 萬。我們想檢查這個生成的數字是否在上表(帶有數字列)中。
我們怎樣才能做到最好?
筆記:
-> 隨機數將在應用程序邏輯中生成。
-> 我想知道策略/虛擬碼如何設計得最好?
將百萬個數字放在一個表中。然後
JOIN
將表放在一起,看看哪些表存在。或者LEFT JOIN ... IS NULL
看看哪些是缺失的。
您的 random_number_series 表是否相當靜態?數列是否相當碎片化?
如果兩者都是,我的第一個想法是在序列中儲存“間隙”表可能更有效。
random_number_series_gaps ( gap_start_number , gap_end_number )
If exists ( select * from random_number_series_gaps where @randomNumberFromMyApp between gap_start_number and gap_end_number ) SELECT 'Random number does not exist!'