Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.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关于多个列的分离索引的问题_Mysql_Sql_Database_Indexing - Fatal编程技术网

Mysql关于多个列的分离索引的问题

Mysql关于多个列的分离索引的问题,mysql,sql,database,indexing,Mysql,Sql,Database,Indexing,如果你能根据你的经验帮我回答这些问题 1-如果我为5列创建了单独的索引 用户名、国家、创建地址、评论、状态 并在where子句username=和country=以及comments=中使用了许多列 sql会为这3列使用索引吗?因为每一个都有自己的索引 2-如果我有多列索引用户名、国家、创建地址、注释、状态 我使用了两列,其中username=和status= 我知道它会使用用户名,但它也会使用状态索引吗 MySQL几乎从不在一个查询中使用两个索引。也就是说,优化器几乎从不选择索引合并 适当时,

如果你能根据你的经验帮我回答这些问题

1-如果我为5列创建了单独的索引

用户名、国家、创建地址、评论、状态

并在where子句username=和country=以及comments=中使用了许多列

sql会为这3列使用索引吗?因为每一个都有自己的索引

2-如果我有多列索引用户名、国家、创建地址、注释、状态

我使用了两列,其中username=和status=


我知道它会使用用户名,但它也会使用状态索引吗

MySQL几乎从不在一个查询中使用两个索引。也就是说,优化器几乎从不选择索引合并

适当时,“复合”多列索引优于两个单独的索引

WHERE username = '...' and country = '...' and comment = '...'
通常会从中受益

INDEX(username, country, comments) -- in any order
其中,INDEXusername、country、created_at、comment、status将仅使用前两列。除非是“覆盖”

WHERE username = '' and status = ''
将受益于任何以用户名和状态开头的索引。它将部分受益于上面的5列复合索引——第一列用户名。仅当“覆盖”时才使用状态

WHERE username = '' and status = ''
覆盖索引是包含SELECT查询中任何位置使用的所有列的索引。在索引中按正确的顺序排列正确的列比“覆盖”更重要

WHERE username = '' and status = ''

下面介绍如何创建最佳索引。

检查执行计划。mysql文档非常好,但有一个问题,比如您添加的url,它没有添加表,实际示例也没有显示哪些列有索引。。。。这看起来有点复杂。谢谢你的参考。