2014-02-21 20 views
0

我有一個表:tbl_tableMySQL的限制指標

隨着colums:col1col2col3

我想運行一個查詢,如SELECT col1 FROM tbl_table WHERE col2=$variable AND col3=0

優化此查詢我需要多 - 列索引(col2,col3)但由於我永遠不會運行查詢col3作爲除0以外的任何其他任何東西,將索引所有col3可能性效率低下。我希望能夠創建一個多列索引,該索引僅索引col3是否爲零或非零,而不是索引整個col3的索引。

這是針對真實世界的情況,我必須這樣做。我有數十億條記錄,索引太大,無法放在驅動器上,我需要修剪它們。

+0

你可以爲了減少查詢搜索到某一個分區 – Hackerman

+0

嗨@RobertRozas使用分區在COL3,此表是以前分區,現在我正在從那個遠離因糟糕的結果。必須切換到TokuDB只是爲了處理它,所以沒有更多的分區。 – Alasdair

回答

1

下運行MySQL(或所有RDM)在稀缺的存放環境,是不合理的困難,特別是當存儲很便宜,因爲它是在2014年

MariaDB的提供了持久虛擬列的概念。 https://mariadb.com/kb/en/virtual-columns/。這些可以被索引和加載。他們確實需要存儲。

您可以嘗試使用一個這是一個從涉及像這樣的功能做:

Concat(if(col3=0,'z','n'),col2) 

但如果你是這樣的存儲約束你不能添加索引,你可能將無法用索引添加一個永久虛擬列。

如果您的任何表格是隻讀的,您可以嘗試壓縮它們以釋放存儲空間。

https://dev.mysql.com/doc/refman/5.5/en/compressed-format.html