SQL Server против производительности MS Access - PullRequest
3 голосов
/ 16 сентября 2010

У меня есть приложение, которое использует Sql Server 2005 в качестве серверной части. Он содержит огромные записи, мне нужно объединить таблицы, которые содержат 50K-70K. Клиент м / с является более низким оборудованием.

Итак, можно ли улучшить его производительность, используя MS Access в качестве бэкэнда? Мне также нужно выполнить операцию поиска по файлу доступа. Итак, какой из них лучше для производительности?

Запрашивать Access лучше, чем запрашивать SQL с более низкой скоростью?

Ответы [ 9 ]

8 голосов
/ 16 сентября 2010

Поскольку SQL Server работает как отдельный процесс, кэширует результаты, использует оперативную память и вычислительную мощность, когда не запрашивается, и т. Д., ЕСЛИ на другом компьютере очень мало ОЗУ или очень медленный процессор (или, что еще важнее, один процессор), я мог видеть ситуацию, когда SQL Server на самом деле МЕДЛЕННО, чем MS Access.

Без информации о настройке вашего оборудования, о том, какой процент вашего приложения зависит от запросов к базе данных и т. Д., Я не уверен, что на этот вопрос можно легко ответить.

MS SQL Server 2005 Express требует не менее 512 МБ ОЗУ (см. http://www.microsoft.com/sqlserver/2005/en/us/system-requirements.aspx),, поэтому, если у вашего оборудования более низкого уровня не менее 512 МБ, я бы определенно выбрал MS Access поверх SQL Server.

Я также должен добавить, что вы, возможно, захотите рассмотреть SQLite (см. http://www.sqlite.org/), который должен быть значительно меньше накладных расходов, чем MS SQL Server. Я не уверен, как он будет складываться с использованием MS Access по чему-то вроде Джет. Мой инстинкт инстинкта в том, что он будет работать лучше с меньшими накладными расходами.

1 голос
/ 21 сентября 2017

Я отвечу на вопрос напрямую, но сначала важно знать несколько вещей о Access и SQL.

В целом я обнаружил, что небольшая база данных с записями до 10 КБ будет одинаково хорошо работать как в Access, так и в SQL, если на всех машинах имеется подходящее оборудование. Доступ имеет преимущество для простоты для небольшого числа пользователей, до 4, но также имеет ограничение размера 2 ГБ. Поэтому вам нужно быть осторожным, чтобы размер базы данных оставался ниже этого предела. Некоторые базы данных начинаются с малого, но затем со временем увеличиваются. Что нужно иметь в виду при планировании будущего вашей программы и / или базы данных. Если вы можете приблизиться к пределу в 2 ГБ, одним из вариантов является использование Microsoft SQL Server 2014 Express Edition с ограничением размера базы данных 10 ГБ. SQL Express - это полный SQL, но с ограничениями по размеру. Максимальный размер базы данных SQL Server 2014 составляет 524 ПБ (524 000 000 ГБ). Так что было бы справедливо сказать, что у него нет практических ограничений.

Если в вашей базе данных более 10 тыс. Записей, особенно для больших баз данных из 100 тыс. Записей или более, SQL может продемонстрировать значительный прирост производительности.

Некоторая производительность с MS Access может быть достигнута с помощью «Pass through query», как и любая программа, использующая запросы, оптимизированные для SQL.

Почему? Ответ приходит от того, как технология работает под капотом. С помощью Access, если он не использует «Пропускать запросы», он прочитает всю таблицу, найдет, какие записи ему нужны, а затем покажет результат. В программе, использующей запросы, оптимизированные для SQL, механизм SQL возвращает только результаты очень эффективным образом.

В конце концов, если у вас есть небольшая (<10K запись) база данных, используемая до 4 человек, MS Access может иметь смысл. Если у вас есть планы, что база данных может вырасти до более чем 10 000 записей или использоваться более чем 5 пользователями, логичным выбором будет SQL. </p>

Специально для вопроса, поставленного о базе данных записей 50-70К. Я думаю, что если у вас есть подходящее оборудование, обычно SQL будет работать лучше, если у вас будет уникальная ситуация (например, более низкое оборудование на сервере SQL), переход к Access может привести к некоторым улучшениям.

1 голос
/ 13 сентября 2013

Я пытался использовать SQL Server Express 2005 VS MS Access 2010, многие говорили, что SQL Server будет работать быстрее, чем MS Access (я тоже так думал в первую очередь).Но то, что произошло потом, удивило меня: выполнение запросов с MS Access выполняется быстрее, чем с SQL Server, и дает значительный результат (с такими же данными и структурой, потому что я раньше конвертировал из Access в SQL Server).пока не знаю его производительность в других процессах, таких как вставка, обновление и удаление.

1 голос
/ 17 сентября 2010

Я думаю, что комментарий Альберта Каллала является правильным, и дело в том, что если у вас есть однопользовательское приложение, работающее на одной рабочей станции (клиент Access с SQL Server, работающий на той же рабочей станции, что и клиент), то довольно частомедленнее, чем если бы на этой рабочей станции был клиент Access для сервера Jet / ACE на том же компьютере.SQL Server добавляет много накладных расходов, которые не приносят никакой пользы, когда между клиентом и SQL Server нет сети.

Уравнение производительности меняется, когда задействована сеть, даже для однопользовательского приложения.Если клиент Access работает на рабочей станции, а SQL Server - на сервере на другом конце сетевого подключения (даже быстрого), это, вероятно, будет быстрее, чем если бы данные сохранялись в файле Jet / ACE нафайловый сервер.

Но это не дано, на мой взгляд.Это полностью зависит от разработки приложения и совершенства схемы.

1 голос
/ 16 сентября 2010

70000 записей на самом деле не так уж велики для сервера SQL (или доступ к этому вопросу). Я хотел бы повторить сказанное и сказать, что при прочих равных SQL-сервер не сможет выполнить Access.

Я хотел бы вернуться к вашему запросу и посмотреть на план выполнения, чтобы понять, почему он такой медленный, может быть, отсутствующие индексы, устаревшая статистика или целый ряд других причин могут объяснить ваши текущие проблемы производительности.

Сервер SQL также позволяет использовать материализованные представления для повышения производительности. Торговля медленнее вставляет / обновляет / удаляет производительность, но если вы читаете больше, чем пишете, это может стоить.

0 голосов
/ 28 сентября 2017

Моя точка зрения на эту тему заключается в том, что нужно думать о полезной нагрузке с точки зрения пикапа, а не 18-колесного. Лучше / хуже / быстрее / медленнее, несколько упускает из виду. Это вопрос выбора подходящего транспортного средства для полезной нагрузки.

70 тыс. Записей легко обрабатываются на современных ПК. Таким образом, можно также придерживаться пикапа, если у организации уже нет установленного набора навыков SQL Server, не было бы никаких оснований использовать его для локального приложения Windows, содержащего всего 70 тысяч записей. Очевидно, что если это веб-приложение / мобильное приложение, для которого требуется технология БД, то Access не является кандидатом.

0 голосов
/ 28 января 2016

Локальный SQL Server Express 2014 1 минута около 2200 записей (2200x подключиться к БД и извлечь 1 запись)

Внешний SQL Server Express 2014 (другой IP) 1 минута около 2200 записей (2200x подключиться к БД и получить1 запись)

Внешний SQL Server 2000 (старый сервер) 1 минута около 10000 записей (10000x подключиться к БД и получить 1 запись)

Locale Access Database 1 минута около 55000 записей (55000x подключиться кБД и получить 1 запись)

Мы тоже удивлены.

0 голосов
/ 31 января 2013

SQL Server имеет лучшие параметры индексации ... Отфильтрованные индексы, включенные столбцы и т. Д. Существует нулевая вероятность того, что запрос Access будет выполняться быстрее, чем правильно проиндексированный запрос к базе данных SQL Server.

0 голосов
/ 16 сентября 2010

SQL Server всегда даст вам лучшую производительность, потому что запрос выполняется на сервере.Доступ к серверной части не поможет, потому что вашему клиентскому приложению потребуется извлечь все данные из таблиц, а затем выполнить объединение локально.

...