2014-10-16 37 views
0

我有一個MEDIUMTEXT類型的列表。本表中有約15萬條記錄。MySql:用TEXT列查找空記錄非常慢

我試圖找到記錄,其中該字段爲空:

SELECT * FROM `q_tasks` WHERE `html`!='' limit 100 

html有MEDIUMTEXT型,並有串超過200 KB的長度。

這是非常緩慢的。我曾想過爲此專欄添加一個索引,但它會起作用嗎?我可以嘗試,但我有點害怕它實際上是什麼意思添加索引這種列。我的意思是我在一個DATETIME列中添加了一個索引(在同一張表中),它花費了很長時間並在我的磁盤上佔用了大約3GB。現在我只剩下約10 GB的可用空間:(

所以我有兩個問題,將添加一個索引來改善速度?又有多少千兆字節(約)將這個指標把我的磁盤上?

+1

指標有其長度,你不能只是指數東西,即使你可以,它並不意味着如果你在某個東西上拋出一個索引,它會突然開始快速工作,你應該做的是計算文本列的散列(比如md5),添加一個存儲散列的列和列ñ。至於它需要多少空間 - 這是無關緊要的。數據庫只有在可以使用RAM時纔是快速的。當你的數據庫變成蝸牛時,你開始依賴於硬盤(比持久性更強)。 – 2014-10-16 14:43:01

+0

謝謝。怎麼樣添加一個新的列,說「is_html_empty」 - 這將是0或1,然後索引該列?通過這種方式,我可以通過搜索此列來查找具有空'html'列的記錄。這是一個合理的想法? – Konrad 2014-10-16 14:51:56

+0

不是。該索引將具有可怕的基數,並且無用,所以MySQL不會使用它。這意味着你可以添加這樣一個列,但不要索引它,因爲它不會有任何影響。 – 2014-10-16 14:53:44

回答

0

恕我直言,最好的選擇是讓此列NULL值,然後使用WHERE子句是這樣的:

SELECT * 
FROM q_tasks 
WHERE html IS NOT NULL 
LIMIT 100 
+0

沒有索引時,這仍然很慢。 – 2014-10-16 14:44:35