Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 关于比较两个指标:(a,b)和(a)_Mysql_Indexing - Fatal编程技术网

Mysql 关于比较两个指标:(a,b)和(a)

Mysql 关于比较两个指标:(a,b)和(a),mysql,indexing,Mysql,Indexing,表t有两列 a varchr(50) not null b varchr(50) not null 可能有以下搜索场景 仅搜索指定a(例如foo1,foo2,…)(选择a,b,状态,计数(*),其中a在(xxx)组中由a,b,状态) 仅搜索指定b(例如,bar1,bar2,…)(选择a,b,状态,计数(*),其中b在(xxx)组中由a,b,状态) a和b都指定(选择a、b、状态、计数(*),其中a在(xxx)组中,b在(xxx)组中,由a、b、状态) 自然应该为a和b创建索引,例如 alt

表t有两列

a varchr(50) not null
b varchr(50) not null
可能有以下搜索场景

  • 仅搜索指定a(例如
    foo1,foo2,…
    )(
    选择a,b,状态,计数(*),其中a在(xxx)组中由a,b,状态

  • 仅搜索指定b(例如,
    bar1,bar2,…
    )(
    选择a,b,状态,计数(*),其中b在(xxx)组中由a,b,状态

  • a和b都指定(
    选择a、b、状态、计数(*),其中a在(xxx)组中,b在(xxx)组中,由a、b、状态

自然应该为a和b创建索引,例如

alter table t add key idx_a_b (a,b);
alter table t add key idx_b (b);
但现在我想知道上面的指数和下面的指数有什么不同

alter table t add key idx_a (a);
alter table t add key idx_b (b);

我想如果有什么不同,也许可以忽略。我说得对吗?

最佳索引位于
(a,b,状态)
(b,状态)

这涵盖了所有三个查询,这意味着查询中的所有列都在索引中。对于前两个查询,这些也是最佳的


第三个是有问题的,因为子句中有两个
。MySQL中没有处理过滤的索引。

如果我没有弄错的话,第一个示例将在您只查询a或查询a和b时使用。因此,它的效率会稍高一些,因为您只需要两个索引而不是3个,但是差异应该可以忽略不计。也许两者都尝试一下,做一些解释和分析。