متى يكون الوقت المناسب لاستخدام عبارة SQL "اختر [النتائج] من [الجداول] حيث [الشروط] جلب الصفوف الأولى [ن] فقط"

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

  •  03-07-2019
  •  | 
  •  

سؤال

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

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

المحلول

وأنا أعرف اثنين من الاستخدامات الشائعة:

وترحيل: تأكد من تحديد الطلب. إذا لم يتم تحديد ترتيب، العديد من تطبيقات ديسيبل استخدام كل ما هو مناسب لتنفيذ الاستعلام. هذا "الأمثل" السلوك يأمر يمكن أن يعطي نتائج غير متوقعة للغاية.

SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID

والاستعلامات الفرعية: العديد من الأماكن التي استعلام فرعي يمكن أن تصدر تتطلب أن النتيجة هي قيمة واحدة. أعلى 1 هو مجرد أسرع من كحد أقصى في كثير من الحالات.

--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
  SELECT top 1 CustomerID
  FROM Orders
  WHERE OrderDate = @Today
)

نصائح أخرى

والترحيل مخصص عادة.

نحن نستخدم البيان للأسباب التالية:

  1. اعرض فقط النتائج الأكثر صلة (على سبيل المثال أفضل 100) دون الحاجة إلى نقل جميع الصفوف من قاعدة البيانات إلى العميل.في هذه الحالة، نستخدم أيضًا ORDER BY.

  2. نريد فقط معرفة ما إذا كانت هناك صفوف متطابقة ولدينا بعض الأمثلة.في هذه الحالة، لا نطلب النتائج، ومرة ​​أخرى، يعد FETCH FIRST أرخص بكثير من إعداد قاعدة البيانات لنقل الكثير من الصفوف ثم التخلص منها على العميل.يحدث هذا عادةً أثناء تطوير البرامج عندما تحتاج إلى معرفة ما إذا كانت لغة SQL معينة صحيحة.

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

وأوراكل لديه حتى تلميحا، ودعا FIRST_ROWS التي تشير إلى أن الحصول على البيانات مرة أخرى سريعة، هو أكثر أهمية أن يحصل كل ذلك يعود بشكل فعال.

ومصممي SQL أتفق معك، ولهذا السبب لا تشمل SQL القياسية كبار / الحد / جلب أولا، وما إلى ذلك.

وفكر نتائج بحث جوجل وعدد من الصفحات هناك عادة عن النتائج.

وعلى الرغم من الواضح أن هناك أكثر من ذلك بكثير لأنه في حالة ولكن هذه هي الفكرة.

وبصرف النظر عن الترحيل، في أي وقت تريد أكثر أو أقل [أدخل المتري هنا] صف من الجدول، طلب في [أيا كان متري] والتي تحد من الصف 1 هو، IME، أفضل من القيام فرعي باستخدام MIN / MAX. يمكن أن تختلف من المحرك.

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