MySQL查询速度能否取决于表大小?

时间:2014-05-01 07:07:19

标签: mysql sql database char varchar

我有一个包含3列和2300万行的表。每一行包含一个主键,int值和一个"一个单一的"一句话,就是这样。每个单词长度为3个字符。换句话说,每个单词" Hash Representation"在那里。表大小为5 GB。这张表索引很好。

现在我要用真正的单词创建相同的表,不再有3个字符的哈希。所以每个单词都包含正常的字母数。现在这个表包含2300万行,3列。但是,由于单词的长度超过3个字符的哈希值,因此表的大小为15 GB。这张表索引很好。

这两个表之间的唯一区别是,在第一个表中,Hash的数据类型是char(3)。现在在第二个表中," non_hashed_word"的数据类型是varchar(20)

现在请看下面的代码,我们在上面提到的表格中运行了这些代码。此代码运行0.01秒。

    SELECT `indexVal`, COUNT(`indexVal`) AS OverlapWords, `UniqueWordCount`, 
(COUNT(`indexVal`)/`UniqueWordCount`) AS SimScore FROM `key_word`WHERE `hashed_word` IN 
('001','01v','0ji','0k9','0vc','0@v','0%d','13#' ,'148' 
,'1e1','1sx','1v$','1@c','1?b','1?k','226','2kl','2ue','2*l','2?4','36h','3au','3us','4d~')
 GROUP BY (`indexVal`) LIMIT 500

我们期望在新表中运行相同的代码。

所以我的问题是,即使行数和列数相同,我们的查询也可以生效,因为现在表大小要大得多吗?或者因为数据类型现在是varchar()

1 个答案:

答案 0 :(得分:-1)

肯定是的。使用EXPLAIN来获取查询计划。另一个原因:

  1. 限制必须将整个结果集设置为获得前500个 - >更多行,更多数据

  2. 需要为每一行执行操作(count,/等..)

  3. 如果存在索引,当行数较多时可以更大,可以在磁盘上分段

  4. 等...