如何使用Oracle索引

Jos*_* U. 2 sql oracle indexing plsql composite-primary-key

我是一名几乎没有Oracle经验的PHP开发人员,他的任务是使用Oracle数据库.

我注意到的第一件事是这些表似乎没有像我以前在MySQL中看到的自动编号索引.相反,他们似乎从两个字段中创建了一个索引.

例如,我注意到其中一个索引是Date Field和外键ID字段的组合.Date字段似乎存储了整个日期和时间戳,因此组合相当独特.

如果索引名称是PLAYER_TABLE_IDX,我将如何在我的PHP代码中使用此索引?

我想通过这个索引引用一个唯一的记录(而不是在我的SQL查询的WHERE部分中使用两个AND子句)

有什么建议Oracle/PHP大师?

OMG*_*ies 12

我想通过这个索引引用一个唯一的记录(而不是在我的SQL查询的WHERE部分中使用两个AND子句)

您无需使用复合主键中的所有列来获取唯一行.

您不能直接在SQL查询中使用索引.
在Oracle中,您使用提示语法来建议应该使用的索引,但是希望使用索引的唯一方法是在SELECT,JOIN,WHERE和ORDER BY子句中指定与其关联的列.

我注意到的第一件事是这些表似乎没有像我以前在MySQL中看到的自动编号索引.

Oracle(和PostgreSQL)拥有所谓的"序列".它们是表中的独立对象,但用于与MySQL的auto_increment类似的功能.与MySQL的auto_increment不同,每个表可以使用多个序列(它们从不关联),并且可以单独控制每个序列.

相反,他们似乎从两个字段中创建了一个索引.

这就是桌面设计,没有具体的Oracle关于它.

但我认为是时候解决一个索引在数据库中的含义与你使用该术语的方式不同.索引是一个额外的步骤,可以更快地从表中选择数据(但由于维护它们会使INSERT/UPDATE/DELETE变慢).

你所说的实际上被称为主键,在这个例子中它被称为复合键,因为它涉及多个列.其中一个列(DATE(认为是DATETIME)或外键)在这种情况下可能有重复.但由于密钥基于两个列,因此两个值的组合使它们成为表中唯一记录的关键.