ما هي مزايا الانضمام الواضح للإغلاق المتعدي في SQL؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

عندما أقوم بضم ثلاثة جداول أو أكثر معًا بواسطة عمود مشترك، سأكتب الاستعلام الخاص بي على النحو التالي:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id

سألني أحد زملائي مؤخرًا عن سبب عدم قيامي بالتوضيح انضم إلى الإغلاق المتعدي في استفساراتي مثل هذا:

SELECT *
FROM   a, b, c
WHERE  a.id = b.id
AND    b.id = c.id
AND    c.id = a.id

هي حقا أي مزايا لهذا؟من المؤكد أن المحسن يمكن أن يعني ذلك لنفسه؟

يحرر:أعلم أنها صياغة شريرة، ولكنها مثال سريع وقذر للكود القديم الشرعي +1@ستو لتنظيفه

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

المحلول

لا تحتاج إلى القيام بذلك في محركات قواعد البيانات اليوم، ولكن كان هناك وقت كانت فيه أشياء كهذه تعطي مُحسِّن الاستعلام المزيد من التلميحات فيما يتعلق بمسارات الفهرس المحتملة وبالتالي نتائج أسرع.

في هذه الأيام، سيتم إيقاف بناء الجملة بالكامل على أي حال.

نصائح أخرى

هذا هو بناء الجملة القديم القذر والشرير.تكتب هذا كما

Select
  *  -- Oh, and don't ever use *, either
From
  A 
  Inner Join B On A.ID = B.ID
  Inner Join C On B.ID = C.ID

لا، ينبع بناء الجملة هذا من الأيام التي سبقت ظهور الصلات في اللغة.لست متأكدًا من المشكلات المرتبطة بها، ولكن هناك بالتأكيد بنيات لغوية أكثر دعمًا لربط الجداول.

أريد فقط أن أقول إن هذا النوع من الانضمام هو من عمل الشياطين.
مجرد التفكير في ذلك؛يتم خلط شروط الانضمام والتصفية معًا في بيان المكان.
ماذا يحدث عندما تحتاج إلى الانضمام عبر 20 جدولًا والتصفية على 15 قيمة؟

مرة أخرى، فقط 0.02 دولار

في Microsoft SQL، تكون خطط الاستعلام لهذين الاستعلامين متطابقة - ويتم تنفيذها بنفس الطريقة.

إذا نظرت إليها من وجهة نظر رياضية، فإن الأمثلة الخاصة بك يجب أن تسفر عن نفس النتائج.

أ = ب = ج

وبالتالي فإن المثال الأول الخاص بك سوف يؤدي إلى نفس النتائج كالثاني، لذلك لا حاجة للقيام بالعمل الإضافي.

هذا السؤال مشابه لهذا السؤال هنا مع شرح متعمق للغاية:

سؤال SQL من مقالة جويل سبولسكي

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

بناء الجملة هذا له استخداماته بالرغم من ذلك ...في بعض الأحيان تجد أنك بحاجة إلى ضم جدولين في أكثر من حقل واحد

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