URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 971
[ Назад ]

Исходное сообщение
"sql индексы"

Отправлено sector119 , 12-Сен-02 17:58 
атцы, есть вопрос!

объясни мне разницу между:
1) pole unique not null
2) pole primary key

и чем отличается индекс по двум полям от индекса по одному полю??? включается ли индекс созданый по двум полям когда идет селект только по одному из этих полей?
____________

вот мне и нужна эта уникальность по двум полям! типа я мог сделать
phone int4 not null,
datetime timestamp not null,
unique (phone, datetime)
а потом создать отдельно индекс на phone и отдельно на datetime!
будет делаться селект отдельно и по phone и по datetime и вместе по этим полям! как лучше создать индекс? отдельно на каждое поле или сразу на два один индекс!

или

phone int4,
datetime timestamp,
primary key (phone, datetime)

при создании primary key создается автоматом индекс на два поля одновременно! вот что лучше в моем случае!? сделать отдельные индексы на каждое поле или один на два сразу!???!??


Спасибо!


Содержание

Сообщения в этом обсуждении
"RE: sql индексы"
Отправлено sas , 12-Сен-02 20:22 
>атцы, есть вопрос!

Hi

>
>объясни мне разницу между:
>1) pole unique not null

This is just unique constraint. Can be many per table

>2) pole primary key

This is not just a unique constraint but also used for referential integrity (primary/foreign keys relationships between tables). Only one primary key is allowed for table

>
>и чем отличается индекс по двум полям от индекса по одному полю???
>включается ли индекс созданый по двум полям когда идет селект только
>по одному из этих полей?

Depends on the database. For example for Oracle if y6ou have index on multiple columns, it can be used only if select's where clause uses columns in the same order like they defined in index starting from first one.

for example you have index on f1 and f2 columns. Index will be used if

select ... where f1 = 'something';
or
select ... where f1 = 'something' and f2 = 5;

and it will be not used if
select ... where f2 = 5;


>____________
>
>вот мне и нужна эта уникальность по двум полям! типа я мог
>сделать
>phone int4 not null,
>datetime timestamp not null,
>unique (phone, datetime)
>а потом создать отдельно индекс на phone и отдельно на datetime!
>будет делаться селект отдельно и по phone и по datetime и вместе
>по этим полям! как лучше создать индекс? отдельно на каждое поле
>или сразу на два один индекс!
>
>или
>
>phone int4,
>datetime timestamp,
>primary key (phone, datetime)
>
>при создании primary key создается автоматом индекс на два поля одновременно! вот
>что лучше в моем случае!? сделать отдельные индексы на каждое поле
>или один на два сразу!???!??
>

If you expect large number of queries on both columns semultaneously and separately, then my advice will be to create 2 indexes: on "f1 and f2" and on just "f2". But again it depends on the optimizer, so you have to check what is better for your database. Also remember, that each index increases update time, so number of indexes should be as low as possible. Primary key should be used if you have relationships which should be maintaned by database engine(preferable). Also you can have only one primary key per table and many indexes of other type (for example unique constraints)

>
>Спасибо!

thanks