我的項目的一部分涉及在我的數據庫中存儲和檢索ips的負載。我估計我的數據庫在啓動項目的幾個月內會有數百萬ips的數據。我一直想知道如何簡單地查詢大型數據庫可以得到的情況?什麼將是以下查詢的大致速度:與2.65億行的表ips的大型mysql數據庫
SELECT * FROM table where ip= '$ip' LIMIT 1
INSERT INTO table(ip, xxx, yyy)VALUES('$ip', '$xxx', '$yyy')
?
我可以通過創建255^2個表來創建將具有與所有可能的ipv4 ip地址的所有前兩個數字相對應的名稱來加速查詢速度,那麼每個表將具有最多255^2行所有可能的第二部分到IP。因此,例如查詢IP地址「216.27.61.137」它將被分成2部分,「216.27」(p1)和「61.137」(p2)。首先,腳本將選擇名稱爲p1的表格,然後檢查是否有任何稱爲「p2」的行,如果是,則會從該行中提取所需的數據。將使用相同的過程將新的ips插入到數據庫中。
如果上述計劃不起作用,那麼加快大型數據庫查詢的好方法是什麼?
閱讀關於MySQL中的'INDEX's。 –
使用IPv4地址的字符串表示將比使用'UNSIGNED INT'要慢很多。對於IPv6兼容性,您會遇到字符串,並且它們會更長。 Sharding在這裏不是一個壞主意,但只有當你有插入爭用。值得注意的是,Postgres支持[IP地址作爲本地列類型](http://www.postgresql.org/docs/9.2/static/datatype-net-types.html)。 – tadman
mysql不是唯一的*開源關係數據庫管理系統* – 2013-07-11 21:09:00