mysql表结构适合历史数据吗?

mysql表结构适合历史数据吗?,mysql,Mysql,我知道有很多类似的话题,但我的问题更具体 目前我有两张桌子: 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

我知道有很多类似的话题,但我的问题更具体

目前我有两张桌子:

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配对统计表中,目前有超过20000000条记录,每天都有越来越多的记录

如果我想找到某个交易所的某个日期和时间的价格,我需要首先在date_hours表中搜索,找到正确的日期和时间,并使用该Id查找exchange_pair_统计表

我有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
我认为这些数据(20000 000)对于正常的表格来说是不好的。。。 类似Oracle的大数据现在正在MySQL中集成。因此,在mysql中存储大数据的最佳方法是:

MySql通过MySql和Hadoop开启了新的大数据洞察

  • 您可以将MySQL用作文档存储。可以将许多对象存储为JSON。它是高度推荐和可扩展的
  • MySQL文档存储=(MySQL+NoSql)

    X开发API将有助于通过X协议通过SQL和CRUD操作生成JSON。还可以维护X会话

    这将是最好的透明数据砂光和聊天应用程序或组应用程序共享

  • MySql Sysbench:只读是另一个最好的解决方案。这将是非常快速和可扩展的,使小组聊天应用程序

  • 使用MySql 5.7:InnoDB、NoSql和Memcached API,它们将直接与存储引擎InnoDB交互。它比MySql 5.6快6倍


  • 尽管如此,FaceBook仍在使用这项技术,因为它速度非常快。我认为您可以存储记录数据。

    请将您的问题包括您的表结构,包括索引,请参阅。另外,在
    SELECT
    语句中包含
    EXPLAIN-SELECT
    语句,以查看查询是如何执行的。我已经添加了表结构作为EXPLAIN表