MySQL限制索引

标签 mysql

我有一张 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/

相关文章:

php - 当我通过 nginx 使用 mysql_connet 但命令行运行正常时权限被拒绝

php - 如何显示五行?

PHP/MySQL - 匹配 2 个表

javascript - 从输入文本 TypeAhead 插件中选择一个值后,如何在 div 内显示图像?

mysql - 通过mysql存储过程以附加模式访问文本文件

基于 2 列的 ORDER BY 的 MySQL rowrank

php - CakePHP 3 Query Builder - 如何在条件下使用 max 函数?

Mysql json 数据类型计数和 groupby

php - CodeIgniter 数据库迁移错误

mysql - 在 MySQL Workbench 中创建数据库