操作

2011-05-12 65 views
2

我有一個MySQL表採用這種結構操作

  • ID [PK,MEDIUMINT]
  • UID [MEDIUMINT]
  • 作者[TINYTEXT]
  • TAGS [TINYTEXT]
  • 標題[TINYTEXT]
  • 文本[文字]

當我執行一個搜索或選擇ID,UID,標籤或所有這三個MySQL時,也會在內存中加載文本字段? [我沒有在SQL指定]

例 - >

SQL1-> Select ID,UID,Tags order by Tags 
SQL2-> Select ID,UID,Tags where UID=1 
SQL3-> Select ID,UID,Tags,Title where UID=1 and Tags=Hello 
SQL4-> Select ID,UID,Tags,Title where Tags=Hello 

[將MySQL的負載文本列過在內存上面的查詢?]

+0

聽起來像選擇(在MySQL,WHERE)投影之前執行(在MySQL,選擇)。你如何檢查文本字段是否加載到內存中? – vpit3833 2011-05-12 06:21:05

+0

我不知道,這就是爲什麼我問:) – Sourav 2011-05-12 06:23:21

+1

http://www.bennadel.com/blog/70-SQL-Query-Order-of-Operations.htm - 讀這裏 - 選擇確實發生在投影之前。所以,是的,不管你是否要求文本字段都被加載到內存中。 – vpit3833 2011-05-12 06:27:26

回答

1

簡短的回答:沒有。

在MySQL中,TEXTBLOB字段是而不是存儲在行中,因此從它們讀取時需要單獨的表查找。 所以在處理上述查詢時,MySQL將不會讀取內存中的text字段。
請參閱:http://nicj.net/2011/01/20/mysql-text-vs-varchar-performance

您有其他問題,這個查詢雖然,它的速度慢因爲:

  1. TEXTBLOB字段不存儲在行中,所以MySQL需要做一個單獨的查詢爲每個TEXT字段。
  2. 的MEMORY引擎不支持BLOBTEXT領域,所以如果 MySQL需要使用臨時表來解決查詢,將中間表存儲在磁盤上放緩東西一路下滑。

諮詢
不要爲列AuthorTagsTitle使用tinytext。這些會更快地使用varchar。
請注意,text是一個保留字,因此您需要將字段名稱附加到反引號`中。

參見:http://dev.mysql.com/doc/refman/5.5/en/blob.html