|
|
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Привет всем! скажите как лучше всего решить задачу. В общем нужно обновить в одной таблице одно поле. записей примерно 10.5 млн строк. весь базы 1,2гб (будет еще больше, а обновлять это поле нужно периодически). Что сам делал. Подключаюсь к базе через ADO. Выполняю следующий запрос $query = 'UPDATE "Coupons" SET "Active" = 0 WHERE "Code" =' & $sLine, но работает очень медленно :( Примерно 6-7 секунд за одну запись :( так же пробовал через RecordSet While Not $adoRs.EOF $adoRs.Fields("Active").Value = 0 $adoRs.Fields("UpdateData").Value = $DataTimeNow $adoRs.Update $adoRs.MoveNext WEnd $adoRs.Close то же самое :( знатоки подскажите, как лучше реализовать данную задачу. сам уже выбился из сил... если кинете еще и маленький примерчик, очень буду благодарен! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 08:19:19 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
JuniorSQL, какой тип поля у Code? По нему есть индекс? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 08:58:13 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Тип поля Code VARCHAR(100), индекс имеется. поле Active тип Integer висит тригер так же индекс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:05:46 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Придется ддл таблицы и план показать. А потом этот-же запрос в IBE за сколько выполняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:06:37 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
DLL: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:12:21 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
А потом этот-же запрос в IBE за сколько выполняется? Запускал через IBM 2005 for Interbase and Firebird на копии базы. Тоже очень долго :( не дождался завершения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:17:33 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
*IBM 2005 = SQLManager 2005 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:18:08 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
JuniorSQL, Код: sql 1. Смущает меня этот индекс Он точно нужен??? Попробуй без него ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:22:53 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Пробовал, убирал его. не помогло... я сразу начал рыть в сторону индекса на поле Active. но без результатно :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:24:47 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
JuniorSQL*IBM 2005 = SQLManager 2005 Эм... Я про это ibexpert.com/rus/ibe_sfx.exe ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:25:19 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
JuniorSQL, что за язык программирования? Версия FB? по этому коду кажется что нужно обновить одну запись по Code автор$query = 'UPDATE "Coupons" SET "Active" = 0 WHERE "Code" =' & $sLine а по этому все записи в таблице Coupons авторWhile Not $adoRs.EOF $adoRs.Fields("Active").Value = 0 $adoRs.Fields("UpdateData").Value = $DataTimeNow $adoRs.Update $adoRs.MoveNext WEnd $adoRs.Close можно всё таки попонятней озвучить что требуется. Какова селективность Coupons_IDX1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:34:00 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
авторчто за язык программирования? Версия FB? подключаюсь через ODBC драйвер. накидал все это дело на AutoIt. читаю текстовый файл, построчно, значения подставляю в запрос: Код: autoit 1. 2. 3. 4. 5. FB Версия 2.5, пытаюсь сделать следующее: в текстовом файле лежат номера разделенные enter'om без пробелов, форматом примерно так: 01234567890 12345678901 23456789012 34567890123 ... их примерно тыс 300. все это дело я считываю и хочу в базе FB (этим номерам) присвоить значение полю Active = 0 автора по этому все записи в таблице Coupons я перед этим выбрал Selecto'm нужные мне номера. З.Ы.без SQL запроса просто считывание строк занимает примерно минуты 2-3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:51:44 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
добавить поле NCode типа нумерик или интеджер, заполнить, создать индекс и в where использовать его. ЗЫ варчар100 с индексом - это сомнительный профит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:53:35 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
JuniorSQL, проще будет этот файл загрузить во временную таблицу без индексов и работать с ней посредством stored procedure на сервере, чем обрабатывать построчно (это изврат, имхо). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:54:41 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
JuniorSQLпытаюсь сделать следующее: в текстовом файле лежат номера разделенные enter'om без пробелов, форматом примерно так: 01234567890 12345678901 23456789012 34567890123 ... их примерно тыс 300. все это дело я считываю и хочу в базе FB (этим номерам) присвоить значение полю Active = 0 автора по этому все записи в таблице Coupons я перед этим выбрал Selecto'm нужные мне номера. З.Ы.без SQL запроса просто считывание строк занимает примерно минуты 2-3. пихни все свои номера в отдельную таблицу и сделай ...where "Code" in (select field1 from table1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:58:04 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
wadman, согласен. Мы как-то с Таблоидом проверяли скорость через загрузку в промежуточную GTT, а потом из неё в таблицу, в некоторых случаях скорость существенно возрастала ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 09:59:29 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
roadster, только не where "Code" in (select field1 from table1), а через MERGE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:00:54 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Симонов Денистолько не where "Code" in (select field1 from table1), а через MERGEчто через мерж? в мачед всё равно как-то надо будет впихнуть селект. впрочем стоит попробовать и оценить скорость. хотя не думаю, что мерж будет быстрее простого апдейта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:06:14 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
roadster, MERGE позволит развернуть порядок обхода таблиц. авторwhere "Code" in (select field1 from table1) Тем более, что для Code в этом случае индекс не может быть применён, а GTT у нас без индесков ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:16:18 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисMERGE позволит развернуть порядок обхода таблиц.в смысле? Симонов Денисавторwhere "Code" in (select field1 from table1) Тем более, что для Code в этом случае индекс не может быть применённу про сомнительный профит от индекса на варчар100 я уже писал, но почему не может быть применён? Симонов Дениса GTT у нас без индескова там всё равно все значения выбирать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:23:36 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
roadsterв смысле? порядок обхода начнётся с GTT. MERGE выполняет RIGHT JOIN с таблицей источником, т.е. она оказывается ведущей. roadsterну про сомнительный профит от индекса на варчар100 я уже писал ну здесь я думаю автор от балды воткнул "с запасом". Если подумает, то наверняка выберет приемлемый размер ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:31:06 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Симонов Дениспорядок обхода начнётся с GTT. MERGE выполняет RIGHT JOIN с таблицей источником, т.е. она оказывается ведущей.ну может так и быстрее будет. Симонов Денисну здесь я думаю автор от балды воткнул "с запасом". Если подумает, то наверняка выберет приемлемый размерсудя по представленному набору входных данных я бы вообще нумерик выбрал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:34:39 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
roadster, NUMBERIC подошёл бы если бы ведущих нулей не было автор01234567890 хотя если количество символов для вывода всегда одинаково, то можно и NUMERIC хранить а при выводе дополнять нулями слева до нужной длины ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:37:30 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
Симонов ДенисNUMBERIC подошёл бы если бы ведущих нулей не былонадо смотреть логику использования этих данных, собственно от предложения переделать в нумерик меня остановил именно этот первый нолик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:39:31 |
|
||
|
Очень медленно работает UPDATE
|
|||
|---|---|---|---|
|
#18+
авторзагрузить во временную таблицу что то типо этого ? Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2014, 10:44:50 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38602562&tid=1563746]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
| others: | 207ms |
| total: | 487ms |

| 0 / 0 |
