Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL大表优化_Mysql_Sql_Database_Database Design_Relational Database - Fatal编程技术网

Mysql SQL大表优化

Mysql SQL大表优化,mysql,sql,database,database-design,relational-database,Mysql,Sql,Database,Database Design,Relational Database,我目前正在开发一个相当大的应用程序,它将处理大量数据。 我正在设计数据模型,我想知道如何针对大量数据调整此模型。(我的数据库管理系统是MySQL) 我有一个包含称为“值”的对象的表。共有6列,称为: 身份证 类型布尔 型浮点数 日期 键入文本 输入 根据该值的类型(在别处写入),其中一列具有数据,其他列为空值 此表旨在包含数百万行(增长非常快)。它也会被阅读很多次 我的设计是用很少的数据做很多线。我想知道是否最好制作5个不同的表,每个表只包含一种类型的数据。有了这个解决方案,将会有更多的连接

我目前正在开发一个相当大的应用程序,它将处理大量数据。 我正在设计数据模型,我想知道如何针对大量数据调整此模型。(我的数据库管理系统是MySQL)

我有一个包含称为“值”的对象的表。共有6列,称为:

  • 身份证
  • 类型布尔
  • 型浮点数
  • 日期
  • 键入文本
  • 输入
根据该值的类型(在别处写入),其中一列具有数据,其他列为空值

此表旨在包含数百万行(增长非常快)。它也会被阅读很多次

我的设计是用很少的数据做很多线。我想知道是否最好制作5个不同的表,每个表只包含一种类型的数据。有了这个解决方案,将会有更多的连接

你能给我一个建议吗? 多谢各位

编辑:我的表的说明

表元素在应用程序中有包含属性的元素

  • 会有很多争吵
  • 读/写操作较多,更新/删除操作较少
表属性定义表属性定义中描述了每个属性(设计时),说明了属性的类型

  • 不会有太多的争吵
  • 一开始写的很少,但读的很多
表ATTRIBUTEVALUE之后,另一个表“ATTRIBUTEVALUE”包含每个元素的每个attributeDefinition的实际数据

  • 将有很多行([nb of Element]x[nb of attribute])
  • 有大量的读/写/更新
表LISTVALUE*有些类型很复杂,比如列表类型。此类型的可用值集位于另一个名为LISTVALUE的表中。然后,属性值表包含一个id,该id是ListValue表的键*

下面是create语句

 CREATE TABLE `element` (
   `id` int(11),
   `group` int(11), ...



 CREATE TABLE `attributeDefinition` (
   `id` int(11) ,
   `name` varchar(100) ,
   `typeChamps` varchar(45) 

 CREATE TABLE `attributeValue` (
   `id` int(11) ,
   `elementId` int(11) , ===> table element
   `attributeDefinitionId` int(11) , ===> table attributeDefinition
   `type_bool` tinyint(1) ,
   `type_float` decimal(9,8) ,
   `type_int` int(11) ,
   `type_text` varchar(1000) ,
   `type_date` date,
   `type_list` int(11) , ===> table listValue



 CREATE TABLE `listValue` (
   `id` int(11) ,
   `name` varchar(100), ...
还有一个SELECT示例,它检索id为66的组的所有元素:

SELECT elementId, 
       attributeValue.id as idAttribute, 
       attributeDefinition.name as attributeName, 
       attributeDefinition.typeChamps as attributeType, 
       listValue.name as valeurDeListe, 
       attributeValue.type_bool,
       attributeValue.type_int,
       DATE_FORMAT(vdc.type_date, '%d/%m/%Y') as type_date,
       attributeValue.type_float,
       attributeValue.type_text
FROM element
JOIN attributeValue ON attributeValue.elementId = element.id
JOIN attributeDefinition ON attributeValue.attributeDefinitionId = attributeDefinition.id
LEFT JOIN listValue ON attributeValue.type_list = listValue.id
WHERE `e`.`group` = '66'

在我的应用程序中,对于每一行,我打印与属性类型对应的值。

由于每次只插入一列,请为每种数据类型创建一个不同的表-如果插入大量数据,这种设计将浪费大量空间

在每个表中减少行数将提高索引查找速度

列名应该描述其中的数据,而不是列类型


请继续阅读。

由于每次只在一列中插入数据,请为每种数据类型创建一个不同的表-如果插入大量数据,这种设计将浪费大量空间

在每个表中减少行数将提高索引查找速度

列名应该描述其中的数据,而不是列类型


请继续阅读。

每行将有大量空字段。如果表不太大,可以,但正如您所说,将有数百万行,因此您正在浪费空间,并且查询将需要更长的时间来执行。做这样的事: 表1 id |类型

表2
键入|其他字段

每行将有大量空字段。如果表不太大,可以,但正如您所说,将有数百万行,因此您正在浪费空间,并且查询将需要更长的时间来执行。做这样的事: 表1 id |类型

表2
键入|其他字段

此处不存在写入问题。阅读意愿

你必须问问自己:

  • 你多久会问一次

  • 是修改旧数据还是只是“附加”


==>如果答案是频繁/仅附加的,或者对旧数据进行了少量修改,缓存可能会解决您的读取问题,因为您不会经常查询库。

这里不存在写入问题。阅读意愿

你必须问问自己:

  • 你多久会问一次

  • 是修改旧数据还是只是“附加”


==>如果答案是频繁/仅附加的,或者对旧数据进行了少量修改,缓存可能会解决您的读取问题,因为您不会经常查询库。

我有一些建议,尽管它可能不是您想要的类型:-)
这看起来像一个模式;使用这种模式会导致各种维护/性能噩梦:

  • 获取主记录的所有值的复杂查询(基本上,您必须将结果表与其自身连接N次才能获取主记录的N个属性)
  • 无引用完整性(我假设您将有单独主数据表的查找值;您不能为此使用外键约束)
  • 浪费磁盘空间(因为您的表将被稀疏地填满)

要获得避免这种模式的更完整的原因列表,我建议获得一份我的建议副本,尽管它可能不是您想要的:-)
这看起来像一个模式;使用这种模式会导致各种维护/性能噩梦:

  • 获取主记录的所有值的复杂查询(基本上,您必须将结果表与其自身连接N次才能获取主记录的N个属性)
  • 无引用完整性(我假设您将有单独主数据表的查找值;您不能为此使用外键约束)
  • 浪费磁盘空间(因为您的表将被稀疏地填满)

为了获得避免这种模式的更完整的原因列表,我建议获得一份

的副本。最后,我尝试实现这两种解决方案,然后将它们定为基准。 对于这两种解决方案,都有一个表元素和一个表属性定义,如下所示:

| id | group | name | type | | 12 | 51 | 'The Bool attribute' | type_bool | | 12 | 51 | 'The Int attribute' | type_int | | 12 | 51 | 'The first Float attribute' | type_float | | 12 | 51 | 'The second Float attribute'| type_float |

| id | group   | name                        
| 42 | 51      | 'An element in the group 51'
| id | element | attributeDefinition | type_int | type_bool | type_float | ...
| 1  | 42      | 12                  | NULL     | TRUE      | NULL       | NULL...
| 2  | 42      | 13                  | 5421     | NULL      | NULL       | NULL...
| 3  | 42      | 14                  | NULL     | NULL      | 23.5       | NULL...
| 4  | 42      | 15                  | NULL     | NULL      | 56.8       | NULL...
| id | group   | element | value |
| 3  | 51      | 42      | 23.5  |
| 4  | 51      | 42      | 56.8  |
| id | group   | element | value |
| 1  | 51      | 42      | TRUE  |
| id | group   | element | value |
| 2  | 51      | 42      | 5421  |