gpt4 book ai didi

mysql - SQL大表优化

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:46 24 4
gpt4 key购买 nike

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

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

  • 编号
  • bool 型
  • type_float
  • 输入日期
  • type_text
  • type_int

根据该值的类型(写在别处),其中一列有数据,其他列为 NULL 值。

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

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

你能给我一个建议吗?非常感谢!

编辑:我的表的描述

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

  • 会有很多行。
  • 读/写多,更新/删除少。

TABLE ATTRIBUTEDEFINITION 每个属性都在表 attributeDefinition 中描述(设计时),说明属性的类型。

  • 不会有很多行
  • 开始时写入很少,但读取很多。

TABLE ATTRIBUTEVALUE 之后,另一个表“attributeValue”包含每个元素的每个 attributeDefinition 的实际数据。

  • 会有很多行([元素数量] x [属性数量])
  • 大量读/写/更新

TABLE LISTVALUE *有些类型很复杂,例如 list_type。此类型可用的值集位于另一个名为 LISTVALUE 的表中。然后属性值表包含一个 id,它是 ListValue 表的键*

这是创建语句

 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'

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

最佳答案

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

每个表中的行数越少,索引查找速度就越快。

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

继续阅读 Database Normalisation .

关于mysql - SQL大表优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8745633/

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