|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
Здравствуйте. Есть такая простенькая база хешей рутрекера: yadi.sk/d/FN1x5mjhkAN63 В 2003-м формате, чтобы у всех открывалась. Одна таблица (ну почти), одна форма. Проблема: фильтр в форме, он же поиск, занимает примерно 10 секунд, что некоторым кажется много. Понятно, что 1625973 записи это не так уж и мало, но может есть какой-нибудь манёвр для оптимизации, про который я забыл? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 22:13 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
NBjHCBrc6KlSObm, в конструкторе в таблице t_torrents установите свойство "Индексированное поле - Да" для полей forum_name и torrent_name , размер базы увеличится, за то ваши фильтры будут работать значительно шустрее ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 23:30 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
guest_rusimport, попробовал, но не заметил прироста скорости. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2015, 23:46 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
NBjHCBrc6KlSObm, ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 00:09 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
guest_rusimport, если сначала выбрать название форума, а потом уже название торрента, то конечно быстро. Тем более «любовь» само по себе быстро ищется. Если же искать например «raime», то всё уже не так быстро. Лучше тестировать на простом запросе из двух слов: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 00:41 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
NBjHCBrc6KlSObm, попутно: ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 00:43 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
Predeclared, да, согласен, проще убрать такой подсчёт, чем полагаться на Me.Recordset.RecordCount. Нормальный счётчик через RecordsetClone время поиска ещё раза в 2 увеличивает :о( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 08:38 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
NBjHCBrc6KlSObm, решил поэкспериментировать на досуге с вашей базой ... да, если искать "raime" по названию торрента, то время поиска в вашей базе на моем компе идет с среднем 20 сек вне зависимости проиндексировано это поле в таблице или нет... тогда я перегрузил вашу табличку в пустую базу и использовал для дальнейших экспериментов следующую функцию (взял за основу код Joss-а с rusimport-a) Код: 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.
результаты тестирования на моем компе показали, что ,собственно, поиск по "raime" идет в среднем 4 с небольшим сек + загрузка таблички в массив еще в среднем 13 сек... т.е. если грузить табличку в Public массив при начальной загрузке программы и потом искать по массиву , присваивать результат ADO рекордсету и этот рекордсет рекордсету вашей формы, то поиск получится значительно быстрее...тут, следует заметить, что по слову "любовь" поиск в вашей программе идет вроде бы 1 сек, но это пока не начинаешь листать в конец найденного списка, начинаются "тормоза" пока список не загрузится полностью, что исключено, при присвоении сформированного ADO рекордсета результатов поиска рекордсету формы в предлагаемом мной варианте ... всё это , конечно, хорошо, если памяти на компе достаточно, массив то с полутора миллионами записей из таблички загоняется в память ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 00:11 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
guest_rusimport, мне кажется, вы слишком усложняете. Разница между поиском «raime» и «любовь» в том, что форма показывает время отображения первой страницы результатов. «Любовь» встречается очень часто, поэтому и первая страница набивается довольно быстро, а чтобы заполнить первую страницу по запросу «raime» нужно все полтора миллиона обыскать, поэтому и кажется, что это занимает больше времени. Я выше писал, что для тестирования лучше использовать запрос, ну и смотреть, когда там счётчик внизу появляется. К тому же InStr("aphex twin") это совсем не то же, что Like "*aphex*twin*" . ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 16:57 |
|
Оптимизация фильтра
|
|||
---|---|---|---|
#18+
NBjHCBrc6KlSObm, вы, кажется , спрашивали - "как оптимизировать", я вам предложил один из вариантов, оптимизация на лицо время поиска с 20 сек, уменьшилось до 4 сек, а как адаптировать при этом поиск, чтобы искалось как Like "*aphex*twin*" у меня тут обсуждать даже желания нет, это уже дело техники (для меня , во всяком случае , прозрачно и не интересно)... если вы не состоянии додумать предложенный алгоритм, может другие вам помогут, если у них , конечно, будет желание ... ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 18:20 |
|
|
start [/forum/topic.php?fid=45&msg=39102488&tid=1614288]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
44ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 159ms |
0 / 0 |