|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Здравствуйте !!! Есть база данных SQL с таблицей с 30-ю колонками(с1, с2, с3…) и со значениями от 0-999 и с кол-вом строк (суммарно во всех таблицах) около 7 000 000 . Нужно создать выборку по количеству совпадений(скажем минимум в 20-ти колонках) с эталоном, а результат вывести в Excel. Пробовал загрузить в массив у тупо сравнить. Процесс сравнения с 1 эталоном занимает 14 минут, следовательно, 1000 запросов никак не сделать. Слышал, что можно как-то через SQL-запрос ускорить процесс . Или если есть какой-то другой выход????? ПОМОГИТЕ !!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 02:02 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Разумеется, SQL-запросом будет сделать на порядки быстрее. Только а) нужно указать СУБД б) описать структуру данных (а то сначала "база данных SQL с таблиц ей , потом "суммарно во всех таблиц ах "), что такое эталон (то ли таблица, то ли запись в таблице), описать, как там с индексами и т.п. в) ну и сделать это на соответствующем вашей СУБД форуме ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 02:06 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Shocker.Pro, База данных MySQL использую для подключения MySQL ODBC 5.1 Driver Имеются таблицы 14 шт. с именами table1, table2.... В каждом по 500 000 строк и 30 колонок с именами Id, С1, С2.... Descr Индекс колонка Id. И есть колонка с описанием Descr Я думаю что кто-то уже пробовал работать и для удобства разбил одну таблицу на 14 относительно мелких Эталон это сравниваемая строчка из CSV файла (с 28-ю значениями) в котором в разные периоды от 1 до 1000 строк как итог нужно получить результаты с 2 колонок (ID И Descr) в таблице Excel Это все что я знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 02:32 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Если ID во всех 14 таблицах разные... Да еще развернуть C1, C2,.. Cx в одно поле... Получим одну таблицу,.. ну, 20 млн. записей, и что? По ней и будем делать выборку... Вот только проблема... - если можете управлять сервером БД - то маленькая... - если качать все это на клиента, а потом делать - можно сразу повеситься... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 03:41 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
AndreTM, В принципе база лежит на отдельном сервере и с админом хорошие отношения. Думаю с серваком проблем не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 03:46 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
ar-markдля удобства разбил одну таблицу на 14 относительно мелкихчтоб вы понимали - это не для удобства, а как раз для осложнения себе жизни. ar-markЭталон это сравниваемая строчка из CSV файла (с 28-ю значениями) в котором в разные периоды от 1 до 1000 строкэта фраза непонятна, что же именно лежит в эталоне? Давайте-ка пример (можно не разворачивать все 28 значений, давайте ограничимся 8-ю) как эталонной строчки, так и таблицы, а также требуемого результата. Насколько я понимаю, таблицы все типовые, так что рассмотрение и создание ограничим одной таблицей, потом сделаете по аналогии. для приведенияпримеров таблицлогично использоватьтэгCSV ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 09:17 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Shocker.Pro, Ок Вечером выложу ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 10:31 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
ar-markПробовал загрузить в массив у тупо сравнить. ................... Эталон это сравниваемая строчка из CSV файла я полагаю, что хорошим решением может быть заливка CSV-файла в таблицу БД и последующая обработка SQL-запросами.... ar-markкак-то через SQL-запрос ускорить процесс Многие участники форума SQL.ru успешно применяют SQL-запросы для решения самых разнообразных задач... )))) - чего и Вам желаем)))) "Как много нам открытий чудных..." - в общем - учить его, SQL, не повредит))) С уважением...... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 12:11 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Выложил файлы 1. MySQL база, подрезал до 1 таблицы , 10-ти колонок , 500 000 строк (Id, c1, c2, c3, c4, c5, c6, c7, c8, descr) 2. CSV файл с эталонами также 10 колонок, только в 10-ой колонке не описание а кол-во мин. совпадений для данной строки (тут в разные дни, разное кол-во строк, я оставил 5 для теста). 3. сам XLSM Файл (переделал для обработки 8-и колонок). Stat.rar в таком виде все работает нормально, но с полной базой в 28 колонок начинаются тормозы. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 15:56 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Лично я это все смотреть не буду, надо заморачиваться с MySQL, которого у меня щас нет под рукой, ковырять алгоритм и т.п. Либо ждем, кто заморочится Либо выкладывайте просто пример таблицы (4-5 строк), пример строки-эталона (1 строка, если я правильно понял) и необходимый результат ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 16:52 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Файл называемый эталонным который меняется каждый день кол-во колонок совпадает с кол-вом колонок в базе, только меняются значения и кол-во строк последняя колонка содержит минимальное кол-во совпадений для данной строки NC1C2C3C4C5C6C7C8min13012453592955898123098279883327312330485691746321143007167934432532671429129401 База Задача сравнить каждую строчку базы со всеми строками в CSV файле, и если кол-во совпадений больше или ровно МИНИМАЛЬНОГО значения всех строчек, то записать в EXEL(индекс , описание, максимальное кол-во совпадений) idc1c2c3c4c5c6c7c8descr130129421417782ПП-2-20-90127536717482319ПП-5-16-5533216575466588187ПП-1-92-3414789786437394885ПП-2-60-62553233303911971169ПП-6-57-23263136206898835318ПП-8-93-313 Конечний результат ИндексОписаниеМаксимум совпадений22117ПП-3-80-773250277ПП-3-80-773255973ПП-3-80-129277157ПП-3-80-772295141ПП-3-79-1242116133ПП-3-80-1292133733ПП-3-80-7732190629ПП-3-80-1262197285ПП-3-80-1282 Код: vbnet 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. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 23:35 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Чётче, чётче! Ещё чётче! ar-markЗадача сравнить каждую строчку базы со всеми строками в CSV файле, и если кол-во совпаденийЧто считается сопадением конкретной строки? - все столбцы таблицы = все столбцы эталона? - какой-то из столбцов таблицы = тому же столбцу эталона? - какой-то из столбцов таблицы = любому столбцу эталона? ar-markбольше или ровно МИНИМАЛЬНОГО значения всех строчекЧто такое минимальноек значение всех строчек? Минимальное значение любого из столбцов в любой из строк? Где, в эталоне? В таблице?ar-mark то записать в EXEL(индекс , описание, максимальное кол-во совпадений)я ведь просил привести конкретный пример, а у вас результат никак не связан с исходными данными. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2012, 23:49 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Shocker.Pro, Чётче, чётче! Ещё чётче! Код: sql 1. 2. 3. 4.
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Проблема: неприемлимое время выполения. На тестовых данных ( таблица-данные .5M записей, таблица-эталон 5 записей ) -процедура ТС-а "Recordset LOOP+Array LOOP" отрабатывает ~48сек, возврщает 25 записей; -отпимизированная(?) процедура "SQL query" отрабатывает ~10сек. Железо Intel(R) Pentium(R) Dual CPU T2370@1.73GHz, DDR2 SDRAM 2GB, Seagate(R) Momentus(R) 5400 ST9250827AS 250GB Аппроксимируя для реальных данных ( таблица-данные 7M записей, таблица-эталон 1K записей ), получил время выполнения оптимизированной(?) процедуры порядка восьми часов *ой...*. Это без учёта меньшего количества полей в тестовых таблицах. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 04:37 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Shocker.Pro, Вот СПАСИБО !!! Это то, что я искал. После тестов выложу результат. Еще раз спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 10:02 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
ar-markShocker.Pro, Вот СПАСИБО !!!это не я скукотищаПроблема: неприемлимое время выполения.тут не используются индексы, можно по идее еще покурить... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 10:16 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
скукотища, Спосибо Спосибо Спосибо !!! Правда пока не запустил, все мучаюсь с СИНТАКСИСОМ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 11:05 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Код: vbnet 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.
Что не так? Ошибка 3709 Невозможно использования подключения для данной операции. Оно закрыто или не допускается ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 11:55 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
ты тут что-то наворочал странного и ненужного: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
вот так: Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 12:09 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Мои 5 копеек: Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 12:51 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Antonariy, К сожалению ругается так же. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 13:23 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
ar-markК сожалению ругается так же.ругается потому что для sqltxt не задан активный коннекшн. Решение я уже привел выше ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 13:31 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Shocker.Pro, я подправил и теперь ошибка в запросе sqltxt = "select t.id, t.descr, max( " & _ "case when t.c1=e.c1 then 1 else 0 end + " & _ "case when t.c2=e.c2 then 1 else 0 end + " & _ "case when t.c3=e.c3 then 1 else 0 end + " & _ "case when t.c4=e.c4 then 1 else 0 end + " & _ "case when t.c5=e.c5 then 1 else 0 end + " & _ "case when t.c6=e.c6 then 1 else 0 end + " & _ "case when t.c7=e.c7 then 1 else 0 end + " & _ "case when t.c8=e.c8 then 1 else 0) from table1 t " & _ мне кажется ошибка из-за того что при расчете мах etalon еще не присоединен(то есть e.c1 пусто), убираю эту часть и все работает, но без МАХа "join etalon e on " & _ ........ еще from t_etalon надо менять на from etalon ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 14:04 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
ar-mark, 12092948 предназначалось для Shocker.Pro, исключительно для четкого описания того, что Вы хотите получить. Там запрос с JOIN и GROUP BY отрабатывает ... не оптимально. Вечером выложу другой вариант. ЗЫ: если можно, выложите одну таблицу со всеми полями и файл-эталон для него (чем больше строк в эталоне, тем лучше). Хочется проверить, насколько больше времени будет тратиться на обработку реальных данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 16:19 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
Shocker.Pro, тут не используются индексы, можно по идее еще покурить... Покури, уважаемый, покури. Я не вижу, в где тут можно прикрутить индексы :( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 16:24 |
|
Помогите с большими объёмами данных и SQL
|
|||
---|---|---|---|
#18+
скукотищаПокури, уважаемый, покури. Я не вижу, в где тут можно прикрутить индексы :(чё обзываешься? мне просто некогда выкуривать код ТС и твой код и тем более не хочу на него ориентироваться, чтобы не замутить себе разум чужими алгоритмами, и написать запрос по-своему с нуля. Однако, автор не хочет уточнять ТЗ, поэтому я пока в паузе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2012, 16:30 |
|
|
start [/forum/topic.php?fid=60&fpage=85&tid=2158064]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 145ms |
0 / 0 |