gpt4 book ai didi

Mysql Casting Performance Benchmark问题/数据架构

转载 作者:行者123 更新时间:2023-11-29 05:42:23 25 4
gpt4 key购买 nike

目前我正在处理一个只是 redicolus 的数据集;来自多个供应商的没有韵律或原因的平面文件;大约有 200 列。这 200 列中有 15 列是共同的,我已将它们拉到另一个表中。

在其他 185 列中,它们混合了 varchar、int 的日期时间和多个字符串值。

现在我正在尝试决定如何最好地存储这 185 列;就像目前在平板上一样,它的扩展性非常差。我有两个解决方案设置,但我不知道哪个更好。

一个是将每一列的元数据存储在单独的表中(如图所示)Image architecture

不过好像用这个方法;如果以后我需要对此处的项目进行查询,那将非常困难。

我想到的另一种方法是将所有列放入具有 id、值、数据类型的表中,而不是在进行查询时将值转换为数据类型,即:

 select * from foo where cast(col_to_query) as int < 5

但是我不确定以这种方式做事时的性能如何。

问题:

这两种方法中哪一种在性能方面更好,您会推荐哪一种(或者如果有更好的选择,我很想听听)。

谢谢

最佳答案

第一种方法的可伸缩性甚至比单个表更差,而且启动查询非常困难。

我建议使用一个包含所有列的单个表作为开始方法。你说它的扩展性很差。你是什​​么意思?它的扩展性如何?查询是否需要很长时间才能返回?您是否为您的查询正确地索引了表?列数通常不会显着影响查询返回的时间,除非它们返回大量数据。如果是这种情况,如果所有时间都花在 mysql 和客户端之间传输数据上,那么如何在幕后存储它对查询响应时间几乎没有影响。如果是这种情况,请确保您只选择了您关心的列。不要执行“选择 *”。

另一种选择是使用表继承策略。在这种情况下,您将拥有一个存储 15 个公共(public)属性的父表,以及一个根据记录来自的文件标识记录类型的“类型”,或者您可以将其称为源。然后,为每个不同的文件创建一个具有 1 到 0-1 映射的扩展表,自定义列仅为每个特定文件。这很可能不会像一个大表那样执行,因为您必须进行联接,但它有助于减少对一个表上通常为 null 的一大堆列的需求。

这看起来像这样:

create table master (
master_id int not null auto_increment primary key,
type int,
<field1> int,
<field2> varchar(20),
...
);

create table file1_data (
master_id int not null primary key,
type int,
<field16> int,
<field17> varchar(20),
...
);

这样查询:

选择 , , ...来自主人内连接 file1_data在 file1_data.master_id = master.master_id哪里...

关于Mysql Casting Performance Benchmark问题/数据架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5738911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com