use*_*272 3 mysql postgresql index
我通常在我的数据库上进行这个查询
SELECT * FROM Example_tab WHERE Column_a + Column_b < 10;
。
是否可以创建基于Column_a + Column_b < 10
加速此查找的索引。我认为可以在此处为基于 oracle 的数据库执行此操作(通过执行CREATE INDEX Idx ON Example_tab(Column_a + Column_b);
)。但我无法在任何地方为 postgresql 或 mysql 找到它。
甚至可以在 oracle 以外的数据库上执行此操作吗?如果是,它是否记录在某处,它们叫什么(基本上,我应该用什么 google 找到它们)?
在此先感谢您的帮助。
PostgreSQL 有表达式索引(我认为是从第 7 版开始!),请查看文档:表达式索引。
因此,您可以轻松地在 上添加索引(column_a + column_b)
,其语法几乎与 Oracle 中的完全相同。唯一的区别是表达式周围的额外括号:
CREATE INDEX idx
ON Example_tab
((column_a + column_b)) ;
Run Code Online (Sandbox Code Playgroud)
注意万一上述和文档是不明确的:
一个表达式可以是一样复杂人愿意,并且可以包括任何数量的运营商或函数调用。
MySQL 没有这样的索引,但它们有一个类似的概念,可以替代使用。MariaDB在其 5.2 版本中引入了VIRTUAL
(计算)列,而核心 MySQL 刚刚GENERATED
在最新的 5.7 中添加了它们(称为)。请参阅:在 MySQL 中生成的列。
因此 - 在 MariaDB 和 MySQL 中 - 您可以添加一个计算列,然后在其上添加一个索引。语法相似,但有一些小的差异。对于MariaDB,该列可以是VIRTUAL
或PERSISTED
。如果你想索引它,它必须是PERSISTED
:
ALTER TABLE Example_tab
ADD COLUMN a_plus_b AS
(column_a + column_b) PERSISTED,
ADD INDEX idx
(a_plus_b) ;
Run Code Online (Sandbox Code Playgroud)
对于MySQL,该列可以定义为VIRTUAL
或STORED
。如果你希望它被索引,对于 5.7.8 之前的版本,它必须是STORED
. 对于 5.7.8+ 版本,可以存储也可以不存储(在这种情况下,计算值仅存储一次,在索引中)。查看有关虚拟列索引的详细信息:
ALTER TABLE Example_tab
ADD COLUMN a_plus_b AS
(column_a + column_b), -- optionally: STORED,
ADD INDEX idx
(a_plus_b) ;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1249 次 |
最近记录: |