Sql “怎么说?”;及;使用索引进行搜索时操作员的工作?

Sql “怎么说?”;及;使用索引进行搜索时操作员的工作?,sql,database-indexes,Sql,Database Indexes,例如: SELECT * FROM posts WHERE owner="abc" AND status="public" 其中所有者和状态都有索引 子句WHERE owner=“abc”可以使用带有B-tree的索引来有效地搜索所有者等于abc的帖子(如果我错了,请纠正我) 但它不会就此停止,它还应该进一步查找和status=“public”条件,我的问题是DB引擎如何有效地执行此额外的查找?或者,它可能只是对的结果集进行完整扫描,其中owner=“a

例如:

SELECT * FROM posts WHERE owner="abc" AND status="public"
其中
所有者
状态
都有索引

子句
WHERE owner=“abc”
可以使用带有B-tree的索引来有效地搜索
所有者
等于
abc
的帖子(如果我错了,请纠正我)

但它不会就此停止,它还应该进一步查找
和status=“public”
条件,我的问题是DB引擎如何有效地执行此额外的查找?或者,它可能只是对
的结果集进行完整扫描,其中owner=“abc”

我很好奇DB引擎如何有效地处理此类查询。

在您的例子中,MySQL(或任何其他现代数据库)将只使用一个索引

假设您有一本书,其中有两个索引:一个按章节索引,在书的开头,一个按关键字索引,通常在书的结尾

你很容易找到第三章的页面,也很容易找到关键字“递归”的页面。但是,如果您需要在第3章中找到递归页面,那么分开的两个不同索引并没有真正的帮助

数据库的工作原理是这样的——它们对每个索引都有一个有序集,引用行。但是,对于给定用户,没有基于其他列的索引/排序

正如人们在评论中指出的那样,答案是由多个列组成的索引。在您的情况下,您应该:

CREATE INDEX idx ON posts (owner, status);
在本例中,您告诉数据库创建一个按所有者排序的索引,并在同一所有者内按状态排序。现在您有了查询所需的内容—一个按两列过滤的索引

您还可以查找该命令。在本例中,您询问数据库如何计划执行您的查询:例如,将使用哪些索引。

在本例中,MySQL(或任何其他现代数据库)将只使用一个索引

假设您有一本书,其中有两个索引:一个按章节索引,在书的开头,一个按关键字索引,通常在书的结尾

你很容易找到第三章的页面,也很容易找到关键字“递归”的页面。但是,如果您需要在第3章中找到递归页面,那么分开的两个不同索引并没有真正的帮助

数据库的工作原理是这样的——它们对每个索引都有一个有序集,引用行。但是,对于给定用户,没有基于其他列的索引/排序

正如人们在评论中指出的那样,答案是由多个列组成的索引。在您的情况下,您应该:

CREATE INDEX idx ON posts (owner, status);
在本例中,您告诉数据库创建一个按所有者排序的索引,并在同一所有者内按状态排序。现在您有了查询所需的内容—一个按两列过滤的索引


您还可以查找该命令。在本例中,您要求数据库说明它如何计划查询的执行:例如,将使用哪些索引。

。MySQL和其他人可能希望复合索引能够正确地利用这一点。您不能很好地使用两个单独的索引。。MySQL和其他人可能希望复合索引能够正确地利用这一点。你不能很好地使用两个单独的索引。我喜欢你的例子。我喜欢你的例子。