|
Производительность - LINQ to SQL versus List<> versus PredlozhitReshenie<%username%>()
|
|||
---|---|---|---|
#18+
Есть таблица, сотня тысяч записей, движок - MS Access 2003. PK - по трём полям типа NVARCHAR. Надо регулярно вставлять туда 5-7 тысяч записей, но из них 70-80% уже есть, не вставятся. Ну и естественно, решил перед вставкой делать проверку - есть запись, или нет. Пишу на C#, VS 2013. Вопрос: как сделать проверку перед вставкой побыстрее - через LINQ to SQL или загрузить всё в память, и проверять по памяти? А может, можно как-то ещё сделать, без проверки? Вставка "в лоб" - с перехватом OleDbException уж очень медленно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.06.2015, 23:10 |
|
Производительность - LINQ to SQL versus List<> versus PredlozhitReshenie<%username%>()
|
|||
---|---|---|---|
#18+
13thЕсть таблица, сотня тысяч записей, движок - MS Access 2003. PK - по трём полям типа NVARCHAR. Надо регулярно вставлять туда 5-7 тысяч записей, но из них 70-80% уже есть, не вставятся. Ну и естественно, решил перед вставкой делать проверку - есть запись, или нет. Пишу на C#, VS 2013. Вопрос: как сделать проверку перед вставкой побыстрее - через LINQ to SQL или загрузить всё в память, и проверять по памяти? А может, можно как-то ещё сделать, без проверки? Вставка "в лоб" - с перехватом OleDbException уж очень медленно. не прощу в СУБД исключить существующие строки и вставить? чем городить такую ахинею, не знаю как в Access, а в mssql и ora всё для этого имеется ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 06:08 |
|
Производительность - LINQ to SQL versus List<> versus PredlozhitReshenie<%username%>()
|
|||
---|---|---|---|
#18+
Т.к. MS Access по сути файл-сервер, то быстрее тащить на клиента всю таблицу и сравнивать клиентом. Т.е. допустим у тебя ключ из трех полей f1,f2,f3 список новых подготавливаешь в памяти и сортируешь по (f1,f2,f3) затем select f1,f2,f3 from MyTable order by f1,f2,f3 Дальше в один проход сравниваются оба набора. В результате получишь список того что надо добавить. Для ускорения сравнений можно добавить поле с CRC32 записи. Получишь 32-битный почти уникальный хэш ключа. Считается быстро. Тогда если CRC32 новой записи отсутствует - это однозначно скажет что запись новая, иначе досравнивать f1,f2,f3. Также сортировка и выборка по CRC32 будет быстрее чем по (f1,f2,f3) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 07:49 |
|
Производительность - LINQ to SQL versus List<> versus PredlozhitReshenie<%username%>()
|
|||
---|---|---|---|
#18+
Roman Mejtes, Ты имеешь ввиду сначала удалить дупликаты, а потом вставить всё? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 12:27 |
|
Производительность - LINQ to SQL versus List<> versus PredlozhitReshenie<%username%>()
|
|||
---|---|---|---|
#18+
Dima T, Чёт я про сортировку не подумал. Тогда да, получается в один проход. Спасибо, хорошая идея. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 12:30 |
|
Производительность - LINQ to SQL versus List<> versus PredlozhitReshenie<%username%>()
|
|||
---|---|---|---|
#18+
Roman Mejtes, ты не понял вопроса. Вопрос не в том, "как сделать?". Способов сделать - много. Вопрос - "какой способ технологичнее?". Ты, если не знаком с MS Access, ничем не поможешь. Твой вариант приведёт к разрастанию БД и потребует регулярного сжатия базы, что тоже не совсем подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2015, 12:34 |
|
|
start [/forum/topic.php?fid=20&fpage=83&tid=1401481]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 144ms |
0 / 0 |