|
Тема
|
Въпрос за търсене
|
|
Автор | grem (Нерегистриран) |
Публикувано | 20.01.04 16:55 |
|
Здравейте, имам таблица в която 3 от колоните заедно образуват тарифен номер, т.е.
хххх xx хххххх
col1 col2 col3
Не мога да ги направя PRI, защото номера може да се повтаря.
Въпросът ми е, как ще е по-добре да ги индексирам - всяка колона поотделно, или трите да образуват един index ?
И също - като числа ли да направя колоните или като char ?
Трябва да се има предвид, че заявката за търсене може да е:
WHERE col1 = 'хххх' AND col2 = 'хх' AND col3 = 'хххххх',
но също така и
WHERE col1 = 'хххх' AND col2 = 'хх'
или пък само
WHERE col1 = 'хххх'
| |
Тема
|
Re: Въпрос за търсене
[re: grem]
|
|
Автор |
fiffy () |
Публикувано | 20.01.04 18:30 |
|
Всичко зависи от начина по който използваш таблицата - много често ли обновяваш (добавяш) информация, колко често търсиш информация и т.н...
Като цяло ако имаш отделни индекси на трите колони - обновяването (добавянето) на информация ще е по-бавно, но търсене ще ти бъде по-бързо...
Трябва да прецения кога ти трябва повече скорост... Ако търсенето на информация е критично и трябва да се оптимизира, значи може би можеш да си позволиш да губиш малко екстра време при обновяване...
Накратко, отговора май е: зависи :))))
Епа, това е моето хоби...
| |
Тема
|
Re: Въпрос за търсене
[re: grem]
|
|
Автор |
phpGuru (минаващ) |
Публикувано | 20.01.04 18:38 |
|
ако ще имаш точно само такива заявки, а не и например
WHERE col2 = 'хххх' AND col3 = 'хх'
тогава за сигурно почти всички сървери един индекс от вида
CREATE INDEX table_full ON table_name ( col1, col2, col3 );
ще е най-добре
като реда на колоните естествено има значение, но синтаксиса, който съм написал може да се различава за различните сървери
три отделни индекса помагат само ако има търсене по трите колони по отделно
| |
Тема
|
с други думи
[re: phpGuru]
|
|
Автор | бaй Любo (Нерегистриран) |
Публикувано | 21.01.04 06:57 |
|
С други думи, ако водещата колона на индекса не с зададена в уеър клаузата за заявката, индекса няма да се използва.
С три отделни индекса, се гарантира (гарантира май е прекалено силна дума в тоя случай) че и заявки по коя да е колона ще използват един от индексите.
Всеки допълнителен индекс разбира се забавя инсъртите, но до 3-4 индекса няма да се почувства -- поне не в сериозните субд от типа на събасе, орацле, мс сял сержер, дб2.
| |
Тема
|
Re: Въпрос за търсене
[re: phpGuru]
|
|
Автор | grem (Нерегистриран) |
Публикувано | 21.01.04 10:12 |
|
Ами няма да има такива заявки.
Ще са само трите случая които описах по-горе. Явно варианта с един index е по-добър.
благодаря.
| |
Тема
|
Re: Въпрос за търсене
[re: grem]
|
|
Автор |
ro6avia (ламерясал) |
Публикувано | 21.01.04 12:39 |
|
A защо не си сложиш и четирите индекса ?
1, 2, 3, 1+2+3
Е тук нищо няма:
| |
Тема
|
Re: Въпрос за търсене
[re: grem]
|
|
Автор |
Hищo (пълно) |
Публикувано | 21.01.04 16:15 |
|
С каква БД? Ако си с Oracle, какъв е оптимайзера - RBO или CBО?
| |
Тема
|
Re: Въпрос за търсене
[re: ro6avia]
|
|
Автор |
fiffy () |
Публикувано | 21.01.04 18:39 |
|
защото ако заявките му са наистина само от трите вида които той споменава, три от индексите няма никога да се използват (въпреки 4е 1 може би ще се използва, според зависи) и ще са напълно излишни...
Епа, това е моето хоби...
| |
|
|
|
|