Мне нужен совет, как получить быстрый результат для запросов на таблице большого размера. Я использую SQL Server 2012, мое состояние выглядит так:Самое быстрое время выполнения запросов на таблицу большого размера
У меня 5 таблиц содержит запись транзакции, каждая таблица содержит 35 миллионов записей. Все таблицы имеют 14 столбцов, столбцы, которые мне нужно найти, - это GroupName, CustomerName и NoRegistration. И у меня есть представление, которое содержит 5 из всех этих таблиц. Записи GroupName, CustomerName и NoRegistration не являются уникальными для каждой таблицы.
У моего приложения есть функция для поиска в этом столбце. Этот запрос, как это:
Поиск по названию группы:
SELECT DISTINCT(GroupName) FROM TransactionRecords_view WHERE GroupName LIKE ''[email protected]+'%'
Поиск по имени:
SELECT DISTINCT(CustomerName) AS 'CustomerName' FROM TransactionRecords_view WHERE CustomerName LIKE ''[email protected]+'%'
Поиск по NoRegistration:
SELECT DISTINCT(NoRegistration) FROM TransactionRecords_view WHERE LOWER(NoRegistration) LIKE LOWER(@NoRegistration)+'%'
Мой вопрос, как может Я добился самого быстрого времени выполнения для поиска? С моим состоянием прямо сейчас, каждый раз, когда я искал, это заняло 3 - 5 минут.
Моя идея состоит в том, чтобы создать новые таблицы, содержащие различные имена GroupName, CustomerName и NoRegistration из всех 5 таблиц.
Является ли моя идея делать время выполнения быстрее? или любая другая идея?
Спасибо
EDIT:
Это запрос для просмотра "TransactionRecords_view"
CREATE VIEW TransactionRecords_view
AS
SELECT * FROM TransactionRecords_1507
UNION ALL
SELECT * FROM TransactionRecords_1506
UNION ALL
SELECT * FROM TransactionRecords_1505
UNION ALL
SELECT * FROM TransactionRecords_1504
UNION ALL
SELECT * FROM TransactionRecords_1503
Так столбцы Введенные в строки? Вы можете ввести новую транзакцию с помощью GroupName 'NewGroup', и если вы случайно использовали это несколько лет назад, новая транзакция совпадает в одной группе? Но если есть опечатка типа «NewGrooup», то это по совпадению группа? Я предпочел бы ожидать таблицу GroupName с транзакциями, ссылающимися на ее записи. –
'SELECT * ... UNION ALL'? Итак, ваши пять таблиц структурированы одинаково? Почему тогда у вас есть пять столов, а не один? Разве это не было бы намного лучше? –
@ThorstenKettner, потому что это транзакционные записи каждый месяц. другая функция в моих приложениях вычисляет транзакцию в месяц, в прошлом месяце и в прошлом году, поэтому я думал, что разделить ее на каждый месяц даст лучшую производительность. – user1008497