У меня есть таблица с именем T_TICKET
со столбцом CallId varchar(30)
.
Вот пример моих данных:
CallId | RelatedData
===========================================
MXZ_SQzfGMCPzUA | 0000
MXyQq6wQ7gVhzUA | 0001
MXwZN_d5krgjzUA | 0002
MXw1YXo7JOeRzUA | 0000
...
Я пытаюсь найти записи, которые соответствуют коллекции CallId
. Примерно так:
SELECT * FROM T_TICKET WHERE CALLID IN(N'MXZInrBl1DCnzUA', N'MXZ0TWkUhHprzUA', N'MXZ_SQzfGMCPzUA', ... ,N'MXyQq6wQ7gVhzUA')
И у меня есть где-то от 200 до 300 CallId
, которые я смотрю одновременно, используя этот запрос. Выполнение запроса занимает около 35 секунд. Могу ли я что-либо сделать со структурой таблицы, типом столбца, индексом или самим запросом, чтобы повысить производительность этого запроса?
В T_INDEX
в настоящее время есть около 300 000 строк. CallId
не уникален. И RelatedData
не уникален. У меня также есть индекс (не кластеризованный) на CallId
.
Я знаю основы SQL, но я не профессионал. Вот некоторые вещи, о которых я подумал:
- Измените тип
CallId
с varchar
на char
.
- Сократить длину
CallId
(это длина 30, но на самом деле, сейчас я использую только 15 байтов).
Я еще не пробовал ни одного из них, потому что это требует изменений в реальных производственных данных. И я не уверен, что они могли бы добиться значительного улучшения.
Будет ли какой-либо из этих вариантов значительно улучшен? Или я мог бы сделать что-то еще, чтобы сделать это быстрее?