我知道有很多类似的话题,但就我而言,我的问题更具体。
目前我有两个表:
date_hours
id | datetime
CREATE TABLE `date_hours` (
`id` int(10) UNSIGNED NOT NULL,
`datetime` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `date_hours`
ADD PRIMARY KEY (`id`),
ADD KEY `date_hours_datetime_index` (`datetime`);
exchange_pair_statistics
id | exchange_id | price | datehour_id
CREATE TABLE `exchange_pair_statistics` (
`id` int(10) UNSIGNED NOT NULL,
`exchange_id` int(10) UNSIGNED NOT NULL,
`exchange_pair_id` int(10) UNSIGNED NOT NULL,
`volume24h` bigint(20) UNSIGNED NOT NULL,
`price` double(14,6) NOT NULL,
`volume_percent` double(5,2) NOT NULL,
`datehour_id` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
ALTER TABLE `exchange_pair_statistics`
ADD PRIMARY KEY (`id`),
ADD KEY `exchange_pair_statistics_exchange_id_index` (`exchange_id`),
ADD KEY `exchange_pair_statistics_exchange_pair_id_index` (`exchange_pair_id`),
ADD KEY `exchange_pair_statistics_datehour_id_index` (`datehour_id`);
ALTER TABLE `exchange_pair_statistics`
ADD CONSTRAINT `exchange_pair_statistics_datehour_id_foreign` FOREIGN KEY (`datehour_id`) REFERENCES `date_hours` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `exchange_pair_statistics_exchange_id_foreign` FOREIGN KEY (`exchange_id`) REFERENCES `exchanges` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `exchange_pair_statistics_exchange_pair_id_foreign` FOREIGN KEY (`exchange_pair_id`) REFERENCES `exchange_pairs` (`id`) ON DELETE CASCADE;
在exchange_pair_statistics表中,目前有超过20,000,000条记录,并且每天都有越来越多的记录。
如果我想为某个兑换的特定日期和时间找到价格,我需要首先在date_hours表中进行搜索,找到正确的价格并使用该ID来查询exchange_pair_statistics表。
我在exchange_id和datehour_id上都有索引,但是有时我需要在那个大表中进行很多搜索,所以我想知道表是进行这种搜索的最佳方法吗?
这是以下示例查询的解释表:
select * from `exchange_pair_statistics` where `exchange_pair_id` = 6985 and `exchange_id` = 42 order by `id` desc limit 1
1 | SIMPLE | exchange_pair_statistics | range | exchange_pair_statistics_exchange_id_index,exchang... | exchange_pair_statistics_exchange_pair_id_index | 4 | NULL | 212786 | Using index condition; Using where
答案 0 :(得分:-2)
我认为这么多的数据(2亿)对于普通表来说是不好的... 像大数据这样的Oracle现在正在集成到MySQL中。因此,在mysql中存储大数据的最佳方法是:
MySql通过MySQL和Hadoop解锁了新的大数据见解。
MySQL Document Store = (MySql + NoSql)
X Dev API将有助于通过X协议通过SQL和CRUD操作生成JSON。也可以维护X会话。
对于透明的数据打磨和共享,最适合聊天应用程序或应用程序组。
MySql Sysbench:只读是另一个最佳解决方案。进行群聊应用程序将非常快速且可扩展。
使用MySql 5.7:InnoDB,带有Memcached API的NoSql,它将直接与存储引擎InnoDB交互。它比MySql 5.6快6倍。
FaceBook仍在使用此技术,因为它非常快。我认为您可以存储记录数据。