У меня есть набор таблицSQL Server 2014 Оптимизация таблиц/Query
dbo.Store_000
dbo.Store_001
....
dbo.Store_216
, содержащий продажи различных магазинов, где соответствующие поля являются
Username, ItemID, Description, CreatedDate, CountryID
Мне нужно извлечь последние 20 продаж от all Stores and I написал следующий запрос:
select top 20 UserName, ItemID, Description, CreatedDate, CountryID
FROM (
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_000
UNION ALL
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_001
UNION ALL
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_002
.....
...
UNION ALL
SELECT UserName, ItemID, Description, CreatedDate, CountryID FROM dbo.Store_216
) ii
order by ii.createdDate desc
В настоящее время таблицы содержат около 200 млн записей (все вместе г)
поэтому сократить время обработки я создал следующий индекс для каждой таблицы:
CREATE NONCLUSTERED INDEX I2_Store000 ON dbo.Store_000
(UserName)
INCLUDE (itemId, Description, CreatedDate, CountryID)
WITH (
PAD_INDEX = OFF,
DROP_EXISTING = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON)
ON [PRIMARY]
, но она по-прежнему занимает слишком много (несколько минут на нашей машине)
вы можете предложить, как улучшить запрос или индекс, чтобы сократить время обработки?
Следует ли создать индекс на основе CreateDate, так как это поле сортировки?
если это может помочь, HERE может найти план выполнения MSSMS.
благодарит
Eralper правильно. Кроме того, вы игнорируете Теорию набора данных, рассматривая записи как курсоры и, по существу, выполняете 21 различный запрос. Интернет полна продуктивных руководств по созданию запросов, таких как thinkbot.com, blog.SQLAuthority и TECHNET. Чтобы быстро обновить запрос, ознакомьтесь с [страницей Thoughtbot] (https://robots.thoughtbot.com/back-to-basics-sql) –
Привет, что вы имеете в виду для 'Data Set Theory, рассматривая записи как курсоры и в основном работает 21 разные запросы'? где я могу найти что-то об этом. – Joe
Одним из способов сказать, что языки баз данных не являются такими, как C++, и обрабатывать таблицы (наборы данных) в целом. Проверьте SQLMag [T-SQL Foundations: Thinking in Sets] (http://sqlmag.com/t-sql/t-sql-foundations-thinking-sets) –