我有一张桌子:tbl_table
使用列:col1
,col2
,col3
我想运行SELECT col1 FROM tbl_table WHERE col2=$variable AND col3=0
要优化此查询,我需要(col2,col3)
上的多列索引,但由于我永远不会将col3
作为除0
以外的任何内容运行查询,因此效率低下索引所有col3
种可能性。我希望能够创建一个多列索引,仅索引col3
是零还是零,而不是索引整个col3
的索引。
这是一个真实世界的情况,我必须这样做。我有数十亿条记录,索引太大而无法放在驱动器上,我需要将它们修剪下来。
答案 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