mysql - 我应该单独还是成组索引列?

标签 mysql sql indexing

假设表结构如下,我想知道最好是单独索引列还是分组索引列:

tbl_id | column1 | column2 | column3 | column4 | column 5
---------------------------------------------------------
1      | 'aaa'   | 'bbb'   | 'ccc'   | 'ddd'   | 'eee'
2      | 'bbb'   | 'ccc'   | 'ddd'   | 'eee'   | 'fff'
3      | 'ccc'   | 'ddd'   | 'eee'   | 'fff'   | 'ggg'
4      | 'ddd'   | 'eee'   | 'fff'   | 'ggg'   | 'hhh'
5      | 'eee'   | 'fff'   | 'ggg'   | 'hhh'   | 'iii'

我可能会在 where 语句中一起使用 column1column2column3 (WHERE column1 = 'val' AND column2 = 'val' AND column3 = 'val'WHERE CONCAT(column1, ' ', column2, ' ', column3) = 'val val val' <= 我认为这是相当不切实际的)。在特殊情况下,我可能还会将 column4 与前 3 列结合使用。

所以我的问题是:

  1. 我应该将其中的 4 个一起编入索引吗?

    CREATE INDEX index_name ON tbl (column1, column2, column3, column4) ... ;

  2. 我应该索引前 3 列,然后分别索引第四列吗?

    CREATE INDEX index_name_1 ON tbl (column1, column2, column3) ... ;

    CREATE INDEX index_name_2 ON tbl (column4) ... ;

  3. 我应该分别为所有 4 个索引吗?

    CREATE INDEX index_name_1 ON tbl (column1) ... ;

    CREATE INDEX index_name_2 ON tbl (column2) ... ;

    CREATE INDEX index_name_3 ON tbl (column3) ... ;

    CREATE INDEX index_name_4 ON tbl (column4) ... ;

  4. 我应该分组索引它们,然后单独索引它们吗?

    CREATE INDEX index_name ON tbl (column1, column2, column3, column4) ... ;

    CREATE INDEX index_name_1 ON tbl (column1) ... ;

    CREATE INDEX index_name_2 ON tbl (column2) ... ;

    CREATE INDEX index_name_3 ON tbl (column3) ... ;

    CREATE INDEX index_name_4 ON tbl (column4) ... ;

我的理解是,如果我要单独为它们编制索引,这在单独搜索/连接它们的情况下会非常有用(即:WHERE column1 = 'val')。希望我可以通过索引清除我的知识,谢谢。

最佳答案

您应该将条件表达为:

WHERE column1 = 'val' AND column2 = 'val' AND column3 = 'val'

适当的索引是 (column1, column2, column3) 上的复合索引。这三列在索引中的顺序并不重要。您可以将 column4 添加为索引中的最终键。

如果您使用 concat() 函数,则 MySQL 无法利用您建议的任何索引。

关于mysql - 我应该单独还是成组索引列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586063/

相关文章:

PHP Mysql错误严格标准: Resource ID#11 used as offset,转换为整数(11)

mysql - SQL查询多个表,其中1中不存在记录

matlab - 提取向量中除第 n 个元素之外的所有元素

MySQL AVG TIME 持续时间计算及相关函数?

php - 依赖嵌套 select 和删除 MySQL 语句中的多个表

php - 带有 PHP 的 MySQL - LIKE 无法正常工作

mysql - 如何从 MySql 中旋转表

php - 从其他3个Docker容器访问MySQL

ruby-on-rails - Mongodb:在 Web URL 上创建唯一索引是个好主意吗?

java - 索引超出范围(文件读取)