MySQL限制索引

时间:2014-02-21 15:10:26

标签: mysql

我有一张桌子:tbl_table

使用列:col1col2col3

我想运行SELECT col1 FROM tbl_table WHERE col2=$variable AND col3=0

等查询

要优化此查询,我需要(col2,col3)上的多列索引,但由于我永远不会将col3作为除0以外的任何内容运行查询,因此效率低下索引所有col3种可能性。我希望能够创建一个多列索引,仅索引col3是零还是零,而不是索引整个col3的索引。

这是一个真实世界的情况,我必须这样做。我有数十亿条记录,索引太大而无法放在驱动器上,我需要将它们修剪下来。

1 个答案:

答案 0 :(得分:1)

在稀缺存储环境中运行MySQL(或任何rdms)是非常困难的,特别是当存储在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