gpt4 book ai didi

mysql - 具有相同数据的两个 MYSQL 表具有不同的大小

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

请找到下面的“测试”表结构,它有 5566 行。 test_table_structure
请找到以下查询的解释详细信息:

select * from test where sig_date='2014-03-15' and symbol='AXP' order by score;

test_table_explain
我创建了具有不同名称和复合主键的相同结构表,并插入了“测试”表中存在的相同数据。 test_com_indx_strcture
现在解释查询,它只选择 9 条记录:

select * from test_com_indx where sig_date='2014-03-15' and symbol='AXP' order by score;

test_with_composite_index
当我检查 2 个表大小时,test_com_indx 占用更多空间并且两个表具有相同的数据。 table_space_details
我的信念是,由于“测试”表具有 PRIMARY KEY 作为 id,因此数据按 id 的顺序物理存储。在“test_com_indx”表中,数据按复合主键的顺序物理存储。因此,两个表都没有单独的索引副本并且两个表的大小应该相同。

如果我的假设是错误的,请纠正我,为什么两个表的大小不同?

提前致谢。

最佳答案

阅读一些内容后,information_schema.TABLES 的结果可能与现实不同步,这可以解释为什么您的 TABLE_ROWS 不同。运行 ANALYZE TABLE 测试,test_com_indx 可能会使它们同步。

如果在那之后大小仍然不同,要么是我关于 ANALYZE 解决问题的错误,要么是因为您的架构中存在这些差异。

  • test_com_indx 使用 VARCHAR(10),测试有 VARCHAR(25)
  • 测试有一个额外的 INTEGER id 列并且必须跟踪 AUTOCOMMIT。
  • test_com_indx 有一个复杂的主键。

或者/这是因为即使您两次执行完全相同的操作,也无法保证内部结构是如何工作的。 SQL 数据库是声明式的,您不应该知道它如何回答您的查询,这可以让服务器腾出时间去做最有效的事情。造成这种情况的原因有很多...

  • INSERT 的顺序可以改变数据的存储方式。
  • 索引可以改变数据的存储方式。
  • InnoDB does not store one table per file .这一切都混合在一个表空间中。一个表中的更改可能会改变另一个表的内部存储。

关于mysql - 具有相同数据的两个 MYSQL 表具有不同的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28360388/

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