簡體   English   中英

MySQL查詢速度可以取決於表的大小嗎?

[英]Can MySQL Query speed depend on the table size?

我的桌子有3列和2300萬行。 每行包含一個主鍵,一個int值和一個“單”字。 每個單詞長3個字符。 換句話說,每個單詞的“哈希表示”都在那里。 表大小為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

我們希望在新表中也運行相同的代碼。

所以我的問題是,即使行數和列數相同,由於表的大小現在要大得多,所以我們的查詢是否可以是sloe? 還是因為數據類型現在是varchar()

絕對可以。 使用EXPLAIN獲取查詢計划。 另一個原因:

  1. 限制必須設置整個結果才能獲得前500個->更多行,更多數據

  2. 需要對每一行執行操作(計數,/等)

  3. 如果存在索引,則當有更多行時此索引會更大,可以在磁盤上進行分段

等等....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM