سؤال

ولدي جدول لمشروع الإحصائي.

وهيكل هو من هذا القبيل:

CREATE TABLE NewStatHistory (
    StatHistoryID uniqueidentifier PRIMARY KEY NOT NULL,
    DateEntered dateTime NOT NULL,
    DateApplies dateTime NOT NULL,
    WhoEnteredID uniqueIdentifier NOT NULL,
    PostingID uniqueIdentifier NULL,
    EnteredValue decimal(19,5) NOT NULL,
    StatID uniqueIdentifier NOT NULL,
    StatStatus int NOT NULL,
    Notes varchar(500) NULL,
    CampusID uniqueidentifier NOT NULL,
    IsTarget bit NOT NULL DEFAULT 0
)

وأحتاج لسحب القيمة الأكثر دخلت مؤخرا لكل "DateApplies".

وهذا الاستعلام يعمل على الفور تقريبا في SQLSERVER لكن في SQLite أنها مجرد انقضاء المهلة، وأنا لا يمكن معرفة كيفية تحسين للحصول على عمل.

SELECT NewStatHistory.* 
FROM NewStatHistory
INNER JOIN (
  SELECT MAX(DateEntered) entered, statID, DateApplies
  FROM NewStatHistory
  WHERE StatID = @statID 
    AND campusID = @campusID
    AND IsTarget = 0
  GROUP BY DateApplies, statID
) summary 
ON summary.entered = newstathistory.dateEntered AND
  summary.statID = newStatHistory.statID AND 
  summary.DateApplies = newStatHistory.DateApplies
WHERE NewStatHistory.StatID = @statID AND
  IsTarget = 0 AND
  campusID = @campusID
ORDER BY NewStatHistory.DateApplies DESC

وأي شخص يحصل على أي أفكار حول كيفية الحصول على عمل. خلاف ذلك، وانا ذاهب لديك للعثور على آخر ديسيبل جزءا لا يتجزأ من الاستخدام. البعض من هذا الاستعلام، وقد فعلت كل شيء سكليتي لقد طلبت منه.

وبقدر ما يذهب الفهارس، وعلى SQLSERVER، لدي المفتاح الأساسي فهرستها فقط. على سكليتي، حاولت مع المفتاح الأساسي فقط، ولكن بعد ذلك المضافة على عدة أعمدة أخرى ولكن دون جدوى.

والاستعلام الفرعي ينفذ في أي وقت من الأوقات على سكليتي أيضا، لذلك يبدو أن الصلة التي تتسبب في بطء.

هل كانت مفيدة؟

المحلول 2

واكتشفت انها محددة في الواقع في وثائق أن هذا النوع من الانضمام ليست مدعومة بشكل جيد. طريقة للحصول على من حوله هي استخدام جدول آخر بدلا من استعلام فرعي. بعد ذلك يعود إلى كونه سريع بتوهج.

نصائح أخرى

وتشغيل EXPLAIN QUERY PLAN على طلبك يشير إلى أن تفعل 2 مسح الجدول لهذا الاستعلام.

ويمكنك أن تقرأ الصفحة وسكليتي سؤال محسن نظرة عامة للحصول على مزيد من المعلومات حول كيفية عمل محسن

وشيئا مشابها لهذا قد يساعد (غير مجربة، وغيرها من رؤيتها المستخدمة):

CREATE INDEX foo ON NewStatHistory(statID, campusID, IsTarget, DateApplies);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top