"الفهرسة" (ويعرف أيضا باسم الحفاظ على الجدول) تجميع البيانات في SQL Server 2005

StackOverflow https://stackoverflow.com/questions/1454555

سؤال

لدي الجدول الذي يحافظ على بيانات أداء النظام ، كل سجل هو دعوة إلى بعض طريقة مهمة و يتكون من اسم الأسلوب ومدته مميز - كل طلب إلى نظام معين فريدة من نوعها رمزية وهكذا جميع السجلات مع نفس المنوال نفس الطلب ، هـ.g:

CallName    Duration    Token
----------- ----------- -----------
GetData     121         12345
Process     800         12345
SaveData    87          12345

GetData     97          ABCDE
Process     652         ABCDE
SaveData    101         ABCDE

أنا مهتم في تجميع البيانات التي تم تجميعها حسب المنوال و CallName ، على سبيل المثال:

-- The total duration of each request, in descending order
SELECT Token, SUM(Duration) FROM Requests GROUP BY Token ORDER BY SUM(Duration) DESC

-- The average duration of each call, in descending order
SELECT CallName, AVG(Duration) FROM Requests GROUP BY CallName ORDER BY AVG(Duration) DESC

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

بالتأكيد الناس لديهم هذه المشكلة من قبل ؟

ما كنت حقا بحاجة هنا هو "مؤشر" على مبلغ(مدة) مجمعة حسب المنوال ، أيالجدول حيث أنا يمكن أن تفعل أشياء مثل:

SELECT Token, SumToken FROM RequestTokens ORDER BY SumToken DESC
  • هل هذه حقا فكرة سيئة ؟
  • إذا كان الأمر كذلك ، هل هناك طريقة أفضل ؟
  • ما يمكن أن يكون أفضل طريقة للقيام بذلك ؟ من شأنه أن يبعث على إدراج / تحديث / حذف / العمل (أين يمكنني تحديث مجموع القيم على أساس القيم القديمة و تغيير البيانات) ، أو أن تكون أفضل حالا يدويا تحديث بلدي "مؤشر" عند تحديث هذا الجدول ؟

المشغلات هي أفضل حل جئت مع حتى الآن, ولكن أستطيع أن أرى بالفعل هذا الجمود / الاتساق كابوس!:-S

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

المحلول

ماذا يحتمل أن تكون عرضا بناء على المجاميع، ربما حتى وجهة نظر مفهرسة. لم أفعل الكثير مع وجهات النظر المفهرسة ولكن هذه المقالة تتحدث عن استخدامها مع مجاميع معقدة مثل AVG (). ربما سوف تحصل عليك في الاتجاه الصحيح.

http://msdn.microsoft.com/en-us/library/aa933148٪28sql.80٪29.aspx.

نصائح أخرى

أولا، لن يكون مؤشرا على العمود الرمز المميز كافيا؟ بهذه الطريقة، بالنظر إلى قيمة الرمز المميز، سيقوم محسن استعلام SQL بمسح هذا الجزء من الفهرس الذي يحتوي على الصف الذي تهتم به. اجعل هذا فهرس متفاوت المسافات، وستحصل على أداء مثالي.

بعد ذلك، كيف تعرف قيمة الرمز الممزقة التي تهتم بالتجميع؟ لا يوجد عمود محدد (أو طابع مرور) مدرجا مدرجا بشكل عشوائي (على عكس شكل من أشكال القيمة الصاعدة)، لذلك أعتقد أنك تعرف قيمة الرمز المميز لتجميعها قبل إصدار الاستعلام - أي الفهرسة يجب أن تفعل ما تريد. إذا كانت القيم غير معروفة ولكن تصاعدي بطريقة أو بأخرى، فهناك عدد من التكتيكات التي يمكنك استخدامها لتحديد قيم الرمز المميز لأحدث الأحدث، وبمجرد حصولك / تلك الرموز التي تعيدها إلى فحص الجدول الجزئي.

سآخذ آخر طعنة في هذا واحد ، الآن أن أفهم بشكل أفضل.هذا ليس من غير المألوف الإبلاغ عن المشكلة التي تؤدي إلى حلول تخزين البيانات مثل:يمكنك فقط إضافة في الجدول الثاني التي تحتوي على ما قبل تجميع البيانات ؟ هذا هو في الواقع denormalized/بيانات زائدة عن الحاجة...ولكن يبدو واضحا محدد المعالم ، يخدم احتياجات الأعمال التجارية.زوجين من التجاعيد على هذه الفكرة:

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

كيف يصل إلى التاريخ يجب أن تكون البيانات?يمكن تجميع البيانات من التوافق مع البيانات التفصيلية ، وإذا كان الأمر كذلك ، متى ؟ يمكن أن يكون لديك SQL Agent العمل في المكان الذي يعمل كل يوم/ساعة/5 دقائق للبحث عن المقالات الأخيرة وتحديث المجمعة الجدول.(إضافة فهرسة "الماضي دخلت" عمود و هذه التحديثات يمكن أن تكون سريعة.) المفاضلة هي الفترة الزمنية البيانات الخاصة بك سيتم إيقاف.(ولكن هذا العمود التاريخ والوقت يمكن أن تشير إلى "خلال عندما" البيانات غير دقيقة.ربما كنت لا تجعل تجميع البيانات المتاحة عن بعد هذه النقطة في الوقت المناسب؟)

إذا كانت البيانات لا تتغير بمجرد دخلت (لا تحديثات ولا حذف ، أي في وقت متأخر-الذين يصلون الصفوف), هذا يمكن أن تعمل-ولكن إذا كان لديك للحفاظ على التحديثات مع مرور الوقت ، فإن البيانات المجمعة التغييرات كان أن تكون متاحة في نفس الوقت إدخال البيانات ، يمكن أن يكون كابوسا للحفاظ على.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top