CREATE PROC [dbo].[GetDataForReports]
(
@userID INT,
@startDate DATE,
@endDate DATE,
@reportType INT, -- 1: Search, 2: UnsuccessfulSearch, 3: SkuViewed
@eventLabel NVARCHAR(400) = NULL,
@level INT = NULL,
@pageNumber INT = NULL,
@pageSize INT = NULL,
@isAll TINYINT = NULL -- 1 for exporting reports
)
AS
BEGIN
IF ISNULL(@isAll,0) = 0
BEGIN
IF @level = 1
BEGIN
SELECT
EventLabel,
TotalCount = COUNT(*) OVER()
FROM
(SELECT DISTINCT EventLabel
FROM ClickStreamData WITH(NOLOCK)
WHERE EventDate BETWEEN @startDate AND @endDate
AND UserID = @userID
AND EventCategoryID = CASE
WHEN @reportType = 1
THEN 1
WHEN @reportType = 2
THEN 5
WHEN @reportType = 3
THEN 2
END
AND Eventlabel = ISNULL(@eventLabel, Eventlabel)
) T
ORDER BY
EventLabel
OFFSET ((@pageNumber - 1) * @pageSize) ROWS
FETCH NEXT @pageSize ROWS ONLY
END
ответ
- Убедитесь, что указатель находится на UserId и EventDate и, возможно, также EventLabel. Нажмите кнопку «Включить действующий план выполнения» в SSMS и используйте его для поиска отсутствующих индексов - это, надеюсь, согласуется со мной, и вы можете точно настроить индексацию именно для запроса.
- К сожалению, я должен добавить: Пожалуйста, не используйте NOLOCK, он может возвращать неточные результаты, если вы не измеряете производительность и действительно нуждаетесь в ней. В Интернете много статей о том, почему это плохо, вот один из них http://www.jasonstrate.com/2012/06/the-side-effect-of-nolock/. Альтернатива NOLOCK обычно настраивает БД правильно с точки зрения стратегии блокировки и настроек блокировки продвижения.
upvoated для указания о nolock – jean
Я также хотел бы добавить, что если вы проверите план выполнения и имеете все необходимые индексы, и все еще медленно, вы можете проверить, правильно ли настроен ваш tempdb на вашем сервере. Этот тип запроса мог бы использовать tempdb совсем немного за кулисами, поэтому, если его фрагментированный, не хватает места или у вас нет одного файла на ядре процессора, или для совместного использования дискового пространства с другими приложениями, то весь ваш сервер может быть медленнее чем было бы иначе. –
- 1. Как повысить производительность этой хранимой процедуры?
- 2. Как повысить производительность этой хранимой процедуры
- 3. Как повысить производительность хранимой процедуры?
- 4. Как повысить производительность процедуры
- 5. Повысить производительность этой функции?
- 6. Производительность хранимой процедуры Oracle
- 7. Повышенная производительность хранимой процедуры
- 8. Как увеличить производительность хранимой процедуры
- 9. Как я могу улучшить производительность этой хранимой процедуры?
- 10. Как повысить производительность этой анимации CSS?
- 11. Как повысить производительность в этой функции?
- 12. Производительность хранимой процедуры Java Java
- 13. Объяснение для этой хранимой процедуры
- 14. Повысить производительность sql-запроса
- 15. SQL Server - производительность выполнения хранимой процедуры
- 16. Производительность MySQL: необработанный запрос против хранимой процедуры
- 17. Как повысить производительность запросов?
- 18. Как повысить производительность MongoDB
- 19. Как повысить производительность памяти?
- 20. Как повысить производительность .NET?
- 21. Gatling - как повысить производительность
- 22. javascript - как повысить производительность?
- 23. Как повысить производительность приложения
- 24. Как повысить производительность запросов
- 25. Как повысить производительность jQuery
- 26. Как увеличить скорость хранимой процедуры?
- 27. Параметр sniffing ухудшает производительность хранимой процедуры
- 28. Производительность SQL для возвращаемой хранимой процедуры
- 29. Получение ошибки при запуске этой хранимой процедуры
- 30. Как многопоточность поможет повысить производительность в этой ситуации?
Какие проблемы с производительностью вы используете? медленный? замок ?. Проверьте план выполнения запроса, чтобы определить, где находятся шеи бутылки. Вы проверяли, нужны ли индексы? – jsp