【发布时间】:2023-03-31 00:35:02
【问题描述】:
我有一个包含 3 列和 3600K 行的表。使用 MySQL 作为键值存储。
第一列 id 是 VARCHAR(8) 并设置为主键。第二和第三列是 MEDIUMTEXT。当调用SELECT * FROM table WHERE id=00000 MySQL 时花了大约 54 秒 ~ 3 分钟。
为了测试,我创建了一个包含 VARCHAR(8)-VARCHAR(5)-VARCHAR(5) 的表,其中的数据是从 numpy.random.randint 随便生成的。 SELECT 在没有主键的情况下需要 3 秒。与 VARCHAR(8)-MEDIUMTEXT-MEDIUMTEXT 相同的随机数据,SELECT 的时间成本为 15 秒,没有主键。(注意:在第二次测试中,第二和第三列实际上包含非常短的文本,如“65535”,但创建作为中文本)
我的问题是:如何在真实数据上实现类似的性能? (或者,不可能吗?)
【问题讨论】:
-
很抱歉,这是 2 分 54 秒,而不是 54 秒。真实数据耗时3min(mysql和python定时
time.clock()),测试数据耗时15sec。 -
你为什么使用 VARCHAR 作为你的 id ?
-
您是否在测试表中的“数据”列上使用索引?还是那里只有主键?我很确定您的瓶颈是磁盘 I/O 和 varchar 作为主键的次优使用
-
就像@Imanez 说的,为什么在你的id 上使用varchar?在索引整数列上搜索要快得多。
-
@Imanez 我应该使用数字 int 还是 TINYTEXT?我被测试弄糊涂了,它使用了 VARCHAR 但比在真实场景中快得多
标签: mysql