我看起來像這樣的兩個表:有效地連接(和更新)的表按值到最小值/最大值範圍
IpNumbers
+----------+----------+-----------------------+
|____min___|____max___|__correspondingCountry_|
| | | |
| 0 | 10 | Australia |
| 11 | 20 | US |
| 21 | 30 | Taiwan |
|____31____|___40_____|_________Canada________|
Users
+----------+----------+----------------+
|__userId__|__ipNumber__|____country___|
| 1 | 6 | |
| 2 | 13 | |
| 3 | 7 | |
|____4_____|_____21_____|______________|
有IpNumbers表,其具有從IP地址derrived一個數字 - 這對應於IP地址所屬的某個國家。例如,如果IP號碼在11 and 20
之間,那麼具有該IP地址的用戶來自美國(US)。
我的問題:我在Users
表約60,000個用戶 - 用戶每一個都有與之相關的IP號碼。我也有IpNumbers表,其中有大約4,000,000條Ip數字與國家的記錄。
什麼是最有效的SQL查詢我可以構造一個國家分配給在Users
表中的每個用戶?多長時間我可以期待查詢完成?
注:我已經收錄在ipNumbers
表min
和max
列,我也收錄在Users
表userId
列。 userId
字段也是獨一無二的。
編輯:ipNumber在users
表也是衍生整數值
是在'Users'還派生整數值'ipNumber'列,或者是它的IPv4點四1.2.3.4?請發佈兩個表的「SHOW CREATE TABLE tablename」輸出。 –
。我還明白,你想直接與每個用戶存儲的國家,而不是基於用戶的'ipNumber'值在運行時查詢呢?這導致了非規範化。 –
@MichaelBerkowski - yes用戶表中的ipNumber也是派生的整數。是的 - 我想直接與每個用戶存儲每個國家。該查詢不會在運行時運行。 – user1775598