Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Увеличится ли производительность БД с ключевым полем?

gvan Профи (531), закрыт 15 лет назад
Имеется таблица в Oracle, в которой порядком 150 тыс. записей, при обращении к таблице заметные невооруженным глазом тормоза. В таблице нет ключевого поля. Увеличится ли скорость обращения при добавлении ключевого поля и как вообще ключ повлияет на производительность?
Просто в данном случае, данные, хранимые в таблице, не имеют уникальных значений, поэтому такое поле и не было создано изначально. Выборка из таблицы так же не будет осуществляться по ключу, исключительно по всему содержимому.
СУБД Oracle, коннект через ADO.
Лучший ответ
grivital Знаток (439) 15 лет назад
Поля, по которым происходит выборка, нужно индексировать.
gvanПрофи (531) 15 лет назад
А если выборка проходит по всем полям и значения их не являются идентификатором?
grivital Знаток (439) Т.е. поиск и сравнение происходит по всем полям? Индексируйте все. А являются они идентификаторами или нет, значения не имеет.
Остальные ответы
Альберт Мудрец (10824) 15 лет назад
По идеи выборка по ключю должна происходить быстрее.
vxcbh Мастер (1930) 15 лет назад
Если "Выборка из таблицы так же не будет осуществляться по ключу, ", то ключ и не нужен.
Если выборка осуществляется таким образом: SELECT * FROM TABLE1, то и никакие индексы также не помогут.
Разве что, поля, которые будут в WHERE FIELD1 = значение AND FIELD2 = значение, будут индексированы.
gvanПрофи (531) 15 лет назад
А если выборка проходит по всем полям и значения их не являются идентификатором?
vxcbhМастер (1930) 15 лет назад
Ты текст запроса покажи :)
Если выборка (наложение условия WHERE) производится по полям, часть из которых индексирована (понятно, что VARCHAR(255) индексировать не стоит), то она будет, в общем случае, быстрее, чем без индексов.
gvan Профи (531) q[i,j]:=TADOQuery.Create(Self); q[i,j].Connection:=DM.ADOConnection1; q[i,j].Name:='ADOQuer'+IntToStr(i)+'_'+IntToStr(j); q[i,j].Parameters.AddParameter; q[i,j].Parameters.Items[0].Name:='idd'; q[i,j].Parameters.Items[0].DataType:=ftString; q[i,j].Parameters.Items[0].Value:=ADOQuery2ID_DATA.AsString; q[i,j].Parameters.AddParameter; q[i,j].Parameters.Items[1].Name:='idm1'; q[i,j].Parameters.Items[1].DataType:=ftString; q[i,j].Parameters.Items[1].Value:=IntToStr(i); q[i,j].Parameters.AddParameter; q[i,j].Parameters.Items[2].Name:='idm2'; q[i,j].Parameters.Items[2].DataType:=ftString; q[i,j].Parameters.Items[2].Value:=IntToStr(i); q[i,j].SQL.Text:='SELECT P_NEME_G.NAME_N, P_REZULT_T.REZULT FROM P_NEME_G, P_REZULT_T '+ 'WHERE P_NEME_G.N=P_REZULT_T.ID_NOMER_G AND '+ 'P_NEME_G.ID_METOD=:idm1 AND P_REZULT_T.ID_METOD=:idm2 AND P_REZULT_T.ID_DATA=:idd';
James Lukash Мудрец (13017) 15 лет назад
Индексы поставьте на селектируемые поля
gvanПрофи (531) 15 лет назад
А если выборка проходит по всем полям и значения их не являются идентификатором?
James Lukash Мудрец (13017) Я немного неточно выразился. Индексы ставятся на поля, по которым идет фильтрация в WHERE
Похожие вопросы