सोमवार, फेब्रुवारी ०६, २०१२

Rails include v/s joins

ही पोस्ट दिग्गज हितेश रावल यांच्या personal blog Hello World मधून घेतली आहे.

:include व :joins , एकप्रकारे हे दोन्ही, सारखेच आहेत कारण दोघांचा वापर एकाच (single) query मार्फत संबंधित table value शोधण्यास होतो. त्यामुळे बर्याचदा आपण या दुविधेत सापडतो कि :include वापरावे कि :joins . या करता एक अतिशय उपयुक्त असे Railscats आहे. या सोबत 'active record चे find method' हा लेख सुद्धा उपयुक्त ठरेल.
यांचावरून मी पुढीलप्रमाणे निष्कर्ष काढला आहे जो हा निर्णय घेण्यास मदतगार ठरेल.

:include
  • associations' वर 'eager loading' गोवते.
  • हे सर्व क्लास रेकॉर्ड (class record) किंवा object attribute  प्राप्त करून मेमोरी मध्ये ठेवते.
  • हे संबंधित असे सर्व 'object attributes' एका 'select' ऑप्शन मार्फत प्राप्त करते.
  • हे संबंधित 'object attribute' view वर दर्शविण्यास उपयुक्त ठरते. 
  • default म्हणून हे LEFT OUTER JOIN चा वापर करते, जे table मधील सर्व रेकॉर्ड दाखवते,
उदाहरणार्थ:
  • :include हे eager -loading करते. यामुळे जेव्हा आपण user रेकॉर्ड प्राप्त करायचा प्रयत्न करू, तेव्हा दुसरी /वेगळी query नाही बनणार.

:joins
  • हे प्रत्यक्षपणे INNER JOIN चा वापर करते जे association नसलेले rows प्राप्त करते.
  • याचा वापर association names  ना  विविध प्रकारे join करण्याकरता आणि संबंधित tables ना join करण्याकरता होतो.
  • संबंधित object attribute values प्राप्त करण्यकरीता प्रत्येक वेळेला हे वेगळ्या query ची निर्मिती करते.
उदाहरणार्थ:

  • :joins eager-loading करत नाही. यामुळे जेव्हा आपण comment पासून user रेकॉर्ड  प्राप्त करायचं प्रयत्न करू, तेव्हा हे एक वेगळी sql query उभार.

The original post can be viewed on Hitesh Rawal's personal blog Hello World! as Rails include v/s joins.

1 टिप्पणी: