Mysql

我們如何設計最佳優化解決方案:生成巨大的隨機數並在數據庫表中檢查這些數字是否存在

  • November 12, 2016

我們有一張桌子,例如:

表名:

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!'

引用自:https://dba.stackexchange.com/questions/154557