Я предполагаю, что вы на самом деле используете Microsoft SQL Server на основе синтаксиса операторов SELECT. Я также предполагаю, что эти три запроса выполняются в разных частях вашей программы, а не один за другим. Если это так, пожалуйста, предоставьте немного больше контекста, как то, что происходит в вашей программе, когда каждый из этих запросов используется. Сохраняется ли база данных на одном жестком диске или RAID-массиве? Какими типами данных являются эти поля (varchar, nvarchar)? Пожалуйста, обновите свой вопрос или добавьте комментарий, и я буду соответствующим образом обновлять этот ответ.
Using Com As New SqlCommand("SELECT [db_Analytics].[dbo].[Companies].[Company Name],[db_Analytics].[dbo].[Companies].[Company] FROM [db_Analytics].[dbo].[Companies] WHERE [db_Analytics].[dbo].[Companies].[Company Name] LIKE '" & atempstr.Substring(0, 3) & "%'", Con)
Не зная подробностей, я предлагаю добавить индекс в поле [название компании]. Попытайтесь получить план выполнения своих запросов, чтобы узнать, как они работают более подробно; это можно сделать из SQL Server Management Studio. Прочтите это сообщение для получения более подробной информации: How do I obtain a Query Execution Plan? Если у вас его есть, то попробуйте это на сервере разработки, потому что вам действительно не нужно «экспериментировать» с производственной коробкой!
Using Com As New SqlCommand("SELECT [db_Analytics].[dbo].[Companies].[Company Name],[db_Analytics].[dbo].[Companies].[Company] FROM [db_Analytics].[dbo].[Companies] WHERE Replace([db_Analytics].[dbo].[Companies].[Company Name], ' ', '') = '" & atempstr.Replace(" ", "") & "' OR Replace([db_Analytics].[dbo].[Companies].[Company Name], ' ', '') LIKE '" & antempstr.Replace(" ", "") & "'", Con)
Using Com As New SqlCommand("SELECT [db_Analytics].[dbo].[Companies].[Company Name],[db_Analytics].[dbo].[Companies].[Company] FROM [db_Analytics].[dbo].[Companies] WHERE Replace([db_Analytics].[dbo].[Companies].[Abbreviation], ' ', '') = '" & atempstr.Replace(" ", "") & "'", Con)
Вы можете индексировать поля аббревиатуры, а также.
Если вам нужно часто искать поля аббревиатуры и [название компании] для данных и удалять пробелы, будет полезно добавить новое поле в таблицу с названием компании и аббревиатурой без пробелов, что-то вроде [название компании nospace] и [аббревиатура nospace]. Зачем? Если вам приходится часто запускать эти запросы, накладные расходы, связанные с посещением каждой строки, удалением пробелов из строк и их сопоставлением быстро складываются. Наличие данных в таблице в другом поле без пробелов в этом случае намного более эффективно.
Если вы не знаете, как создать индекс в MSSQL Server, проверьте эту статью MSDN из: https://msdn.microsoft.com/en-us/library/ms188783.aspx Как минимум, вы можете сказать,
CREATE INDEX idxCompanyName ON [db_Analytics].[dbo].[Companies]([Company Name]);
создать индекс на [название компании ], но вы должны исследовать лучшую конфигурацию индекса для вашей таблицы.
Обновление для комментариев OP: Все будет немного вялым, если вы запустили базу данных с одного жесткого диска. Я предполагаю, что это очень простой сервер, рабочая станция используется как сервер или ящик для разработки. В этом случае все, что вы могли бы сделать, это попытаться компенсировать настройку хранилища. Если вы используете MSSQL Server 2014, вы можете попробовать таблицу в памяти, но у вас должно быть достаточно ОЗУ для операционной системы, SQL Server и данных. Если нет, вы, вероятно, сделаете вещи хуже, потому что Windows поменяет его на диск. Проверьте http://robtiffany.com/create-in-memory-database-tables-sql-server-2014/ и https://msdn.microsoft.com/en-us/library/dn133079.aspx Если возможно, попробуйте объединить последние два запроса в один, чтобы оптимизатор запросов MSSQL мог пойти на него.Кроме того, для выполнения запросов от имени компании и аббревиатуры без пробелов, вы можете сделать одно из нескольких вещей:
- Have VARCHAR столбцов, содержащих данные и приложение вы пишете ставит его там
- У VARCHAR колонок, содержащие данные, помещенные в поля с помощью триггера
- Вычисляемые поля, основанные на столбцах [аббревиатура] и [название компании]. Это может вызвать дополнительные накладные расходы, поэтому вы получите еще больший удар по производительности, поэтому сначала выполните исследования.
Сколько записей в вашей таблице VS сколько вам действительно нужно? если у вас огромное количество записей, и вам не нужны все, что вы можете улучшить, ограничивая результаты с помощью 'TOP' или используя' ROW_NUMBER() как dynamicID' для генерации динамического идентификатора, упорядочивая его и ограничивая значения, используя 'WHERE dynamicID BETWEEN ... AND ...' –
@GordonLinoff было удалено, пока Alexandre Cartaxo не добавил его обратно. мое редактирование, чтобы удалить его снова, находится на рассмотрении –
Убейте его. У меня есть 30k строк в db и 100k необработанных данных для сравнения – user2962807