我有這樣的sql,但它會在sqlserver中運行17秒。
100位用戶登錄我的網站以在剛纔(80%cpu使用率)的同一時間執行此sql,並且沒關係,但它明天將超過1000位用戶。 那麼,我的問題是:
1:如何優化這個sql?
2:100個用戶80%的CPU使用率,如果1000個用戶會發生什麼?緩慢運行的sql查詢
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
WITH tempQuestion AS
(
SELECT
DISTINCT(CASE
WHEN qut.IsComplex=1 THEN qf.Id
WHEN qut.IsComplex=0 THEN qs.Id END) AS QuestionId,
(CASE
WHEN qut.IsComplex=1 THEN qf.Content
WHEN qut.IsComplex=0 THEN qs.Content END) AS QuestionContent,
(CASE
WHEN qut.IsComplex=1 THEN qf.Content
WHEN qut.IsComplex=0 THEN qs.Content END) AS QuetionContentOri,
qut.IsComplex AS IsComplex,
qut.Id AS QuestionTemplateId,
qut.Name AS QuestionTemplateName,
qp.KnowDotCode AS KnowDotCode,
(CASE
WHEN qs.QuestionFaceCode IS NULL THEN qp.Analysis
WHEN qs.QuestionFaceCode IS NOT NULL THEN '' END) AS Analyze,
(CASE
WHEN qs.QuestionFaceCode IS NULL THEN qp.SuitNumber
WHEN qs.QuestionFaceCode IS NOT NULL THEN '' END) AS SuitNumber,
(CASE
WHEN qs.QuestionFaceCode IS NULL THEN qp.Difficult
WHEN qs.QuestionFaceCode IS NOT NULL THEN '' END) AS Difficult,
(CASE
WHEN qs.QuestionFaceCode IS NULL THEN qp.Levels
WHEN qs.QuestionFaceCode IS NOT NULL THEN '' END) AS Levels,
(CASE
WHEN qs.QuestionFaceCode IS NULL THEN qp.Exposure
WHEN qs.QuestionFaceCode IS NOT NULL THEN '' END) AS Exposure,
--qp.Analysis AS Analyze,--浼氬鑷村鍚堥閲嶅
qs.Tag,
qc.Name AS QuestionCategoryName,
qu.Name AS UnitName,
qu.Name AS QuestionUnitName,
qu.Id AS UnitId,
qp.Fettle,
(CASE
WHEN qut.IsComplex=1 THEN ''
WHEN qut.IsComplex=0 THEN qp.CreatedDateTime END) AS CreatedDateTime,
(CASE
WHEN qut.IsComplex=1 THEN ''
WHEN qut.IsComplex=0 THEN qp.LastUseDateTime END) AS LastUseDateTime,
(CASE
WHEN qut.IsComplex=1 THEN ''
WHEN qut.IsComplex=0 THEN u.Name END) AS CreateName,
pqs.Id,
pqs.OrderInPaper,
pqs.Score as Point,
pqs.PaperStrategyId,
pqs.QuestionCategoryId,
pqs.QuestionUnitId,
pqs.KnowDotIds,
(CASE
WHEN qs.QuestionFaceCode IS NULL THEN qs.Answer
WHEN qs.QuestionFaceCode IS NOT NULL THEN('') END) AS CorrectAnswer
FROM EL_QuestionBank.QS_QuestionStem AS qs
LEFT JOIN EL_QuestionBank.QS_QuestionFace AS qf
ON qs.QuestionFaceCode=qf.Id
INNER JOIN EL_QuestionBank.QS_QuestionProperty AS qp
ON qp.QuestionStemCode=qs.Id
LEFT JOIN EL_Organization.[User] AS u
ON qp.CreatorCode=u.Id
INNER JOIN EL_QuestionBank.QuestionCategory AS qc
ON qc.Id = qp.SubjectCode
INNER JOIN EL_QuestionBank.QS_QuestionUnit AS qu
ON qu.Id = qp.QuestionUnitCode
INNER JOIN EL_QuestionBank.QS_QuestionUnitTemplate AS qut
ON qut.Id = qu.QuestionUnitTemplateCode
INNER JOIN EL_Paper.PaperQuestionStrategy AS pqs
ON ((qut.IsComplex=0 AND pqs.QuestionId=qs.Id) OR (qut.IsComplex=1 AND pqs.QuestionId=qf.Id))
WHERE pqs.PaperStrategyId='576222efa335483680e4e2e6e1c3d254'
)
SELECT * FROM tempQuestion
COMMIT TRANSACTION;
有這麼多列後真的需要不同。 – 2014-10-31 02:18:13
@Pradeep,是的,這確實是需要的。 – 2014-10-31 02:23:24
爲什麼你需要在這裏?查詢執行計劃顯示什麼? – radar 2014-10-31 02:26:50