|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
эфиктивность запроса
вопрос теоретический ради интереса
насколько эфективно использовать такой поиск, Код:
Query.SQL.text:='Select * from Tabl where ID="'+id+'"'; Query.open; |
#2
|
|||
|
|||
Делаешь индекс по ID и будет работать мухой хоть на 1000000 записях.
|
#3
|
||||
|
||||
Какая СУБД и на каком сервере? В принципе обывательская БД довольно шустро такое выполнит, да и не думаю, что у тебя там будет более чем легион записей.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
||||
|
||||
1) Никаких звездочек в запросах! это лишний подзапрос для сервера что бы получить список полей для таблицы.
2) Делать только через bind переменные. Что бы субд не парсило запрос каждый раз! как-то так: Код:
Query.SQL.text:='Select Field1,Field2 from Tabl where ID= :id '; Query.ParamByName('id').asInteger:=id; Query.open; Последний раз редактировалось Admin, Сегодня в 10:32. |
#5
|
||||
|
||||
friz
Код:
Query.SQL.text:='Select Field1,Field2 from Tabl where ID= :id '; Query.ParamByName('id').asInteger:=id; Query.open; спасибо за совет сейчас исправлю все) Код:
Query.SQL.text:='UPDATE bdbot SET INFObd="'+info+'" where idbd="'+id+'"'; Query.ExecSQL; БД access,использую компонент TADOQery так вот тогда по скольким записям поиск не будет превышать 50мсек скажем lmikle Цитата:
Последний раз редактировалось ALexandr555, 26.06.2011 в 22:10. |
#6
|
||||
|
||||
в любом запросе желательно использовать bind переменные, это хороший тон программирования.
Последний раз редактировалось Admin, Сегодня в 10:32. |
#7
|
||||
|
||||
Цитата:
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#8
|
||||
|
||||
Цитата:
|
#9
|
|||
|
|||
Цитата:
Естественно, время полной отработки будет зависеть от объема вытаскиваемых данных. Но собственно с временем чтения и передачи самих данных ты все-равно ничего не сделаешь, разве только отложенную загрузку. А вот поиск данных - тут можно поиграть. Индекс создается в БД и обрабатывается самой СУБД. Тебе для этого ничего делать не надо. См команду SQL CREATE INDEX. |
#10
|
||||
|
||||
неужели все так просто
CREATE INDEX PIndex ON таблица (поля) //хотя синтаксис не тот похоже а после добавления записи нужно повторно выполнять CREATE INDEX? Последний раз редактировалось ALexandr555, 27.06.2011 в 22:56. |
#11
|
|||
|
|||
нет, не нужно. индекс создается один раз, потом СУБД сама его поддерживает. Правда тут может быть другая засада. Если таблица очень большая, то при наличии индекса может возникнуть замедлении при вставке записей. Но эту проблему тоже можно решить.
|
#12
|
||||
|
||||
Очень большая это какая?) и как решать?
|
#13
|
||||
|
||||
Ну заметные замедления при вставке начинаются я думаю в районе 10 млн, но эта цифра тоже зависит от структуры таблицы и сложности ограничений на ее поля, ну и конечно от сервера. Для оракла я думаю это вообще даже не минимальный порог, а вот для постгре очень даже может и раньше наступить, хотя при грамотном создании индексов и этого не должно быть.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 28.06.2011 в 11:45. |
#14
|
||||
|
||||
Прочел что в первом поле (где идет нумерация записей) индекс создается автоматически, правда?
И никто не подскажет синтаксис нашел такой но при использовании пишет не верный Цитата:
|