考虑一个简单的查询:
Select username,usertype from Table1 Where usertype='Manager'
最有可能的是,DBMS 将首先执行选择,然后执行投影,即首先从 Table1 中提取具有 usertype='Manager' 的行
是否存在先执行项目,然后选择的情况在任何方面都更优化或更好?
考虑一个简单的查询:
Select username,usertype from Table1 Where usertype='Manager'
最有可能的是,DBMS 将首先执行选择,然后执行投影,即首先从 Table1 中提取具有 usertype='Manager' 的行
是否存在先执行项目,然后选择的情况在任何方面都更优化或更好?
不适用于面向行的存储,其中列值按行存储在一起,这对于从投影开始并不理想。
假设 Table1 有 30 列,但您只需要来自 2(用户名、用户类型)的数据。如果 username 和 usertype 列没有索引,DBMS 必须读取包含所有行的完整表(因此读取所有列)。在这种情况下,执行此操作的唯一顺序是选择,然后是投影。
如果用户名和用户类型是复合索引的一部分,DBMS 将决定从该索引中获取数据,而不是读取整个表本身。索引的列很可能比表少,但它仍然不是您要查找的投影。索引仍然是为面向行的存储而组织的,首先是根据 usertype='Manager' 进行选择,然后是投影。
但是,还有一些其他 DBMS 使用面向列的存储。面向列的数据库管理系统。在这些系统中,整个列一个接一个地存储,这使得从投影开始真的很容易。如果你只需要 30 列中的 2 列,数据库可以简单地读取那 2 列,然后进行选择。这种系统在运行低选择性查询时表现更好,想要访问表中的大部分或所有行. 整体性能取决于工作负载的种类。