我有一张 table :tbl_table
包含列:col1
, col2
, col3
我想运行一个查询,例如 SELECT col1 FROM tbl_table WHERE col2=$variable AND col3=0
为了优化此查询,我需要 (col2,col3)
上的多列索引但因为我永远不会运行查找 col3
的查询与 0
以外的任何内容一样索引所有 col3
的效率很低。的可能性。我希望能够创建一个多列索引,仅索引是否 col3
为零或不为零,不是索引整个 col3
的索引.
这是针对我必须这样做的现实情况。我有数十亿条记录,索引太大,无法容纳在驱动器上,我需要修剪它们。
最佳答案
在存储稀缺的环境中运行 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
关于MySQL限制索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21938043/