Как использовать индексы Oracle - PullRequest
2 голосов
/ 23 сентября 2010

Я разработчик PHP с небольшим опытом работы с Oracle, которому поручено работать с базой данных Oracle.

Первое, что я заметил, это то, что у таблиц, по-видимому, нет автоматического индекса номераЯ привык видеть в MySQL.Вместо этого они, кажется, создают индекс из двух полей.

Например, я заметил, что один из индексов является комбинацией поля даты и поля идентификатора внешнего ключа.Кажется, что в поле «Дата» хранится вся дата и отметка времени, поэтому комбинация является довольно уникальной.

Если бы индекс имел имя PLAYER_TABLE_IDX, как бы я использовал этот индекс в своем коде PHP?

Iхотите ссылаться на уникальную запись по этому индексу (вместо использования двух предложений AND в части WHERE моего SQL-запроса)

Любой совет гуру Oracle / PHP?

Ответы [ 2 ]

12 голосов
/ 23 сентября 2010

Я хочу сослаться на уникальную запись по этому индексу (вместо того, чтобы использовать два предложения AND в части WHERE моего SQL-запроса)

Нет никакого способа, которым вы должны использоватьссылаться на все столбцы в составном первичном ключе, чтобы получить уникальную строку.

Нельзя использовать индекс непосредственно в запросе SQL.
В Oracle вы используете синтаксис подсказки предложить индекс, который следует использовать, но единственное средство надеяться на использование индекса - указать столбцы, связанные с ним, в предложениях SELECT, JOIN, WHERE и ORDER BY.

Первое, что я заметил, это то, что у таблиц, по-моему, нет автоматического индекса номера, как я привык видеть в MySQL.

Oracle (и PostgreSQL) имеют то, что называется "последовательности».Они являются отдельными объектами от таблицы, но используются для функциональности, аналогичной auto_increment в MySQL.В отличие от auto_increment в MySQL, вы можете использовать более одной последовательности для каждой таблицы (они никогда не ассоциируются) и управлять каждой из них по отдельности.

Вместо этого создается впечатление, что они создают индекс из двух полей.

Вот каков был дизайн таблицы, и в этом ничего не было от Oracle.

Но я думаю, что пришло время обратить внимание на то, что индекс имеет другое значение в базе данных, чем то, как вы используете этот термин.Индекс является дополнительным шагом для ускорения SELECT-выбора данных из таблицы (но делает INSERT / UPDATE / DELETE более медленным из-за их обслуживания).

То, о чем вы говорите, на самом деле называется первичным ключом, и в этом примере его можно назвать составным ключом, поскольку в нем содержится более одного столбца.В этом случае один из столбцов, либо DATE (считается DATETIME), либо внешний ключ, может иметь дубликаты.Но поскольку ключ основан на обоих столбцах, именно комбинация двух значений делает их ключом к уникальной записи в таблице.

1 голос
/ 23 сентября 2010

http://use -the-index-luke.com / - это моя веб-книга, в которой объясняется, как использовать индексы в Oracle.вероятно, стоит прочитать, если вы хотите понять, как все работает.

...