<div dir="ltr">Thanks so much!  This will come in very handy in many many places ahead.<div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 28, 2015 at 4:28 PM, Dmitry L. <span dir="ltr">&lt;<a href="mailto:dim0xff@gmail.com" target="_blank">dim0xff@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Try set_cache.<br>
<br>
$row-&gt;related_resultset($relationship_name)-&gt;set_cache( [ $related1,<br>
$related2, ... ] );<br>
<br>
Note, that for single-object relations (belongs_to, has_one, etc) you<br>
also should provide array in set_cache.<br>
<div><div class="h5"><br>
On 29 April 2015 at 02:16, Kevin Karabian &lt;<a href="mailto:kkarabian@turnitin.com">kkarabian@turnitin.com</a>&gt; wrote:<br>
&gt; It is not about execution time, but data size.  The dba&#39;s don&#39;t like it when<br>
&gt; I tell them I am pulling x times more data than before.<br>
&gt;<br>
&gt; I am not against prefetching.  In fact, I had it as a prefetch, but, they<br>
&gt; balked about the potential increase in data returned.<br>
&gt;<br>
&gt;<br>
&gt; On Tue, Apr 28, 2015 at 3:51 PM, Len Jaffe &lt;<a href="mailto:lenjaffe@jaffesystems.com">lenjaffe@jaffesystems.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Prefetch generates SQL joins. The join is the FUNDAMENTAL unit of work in<br>
&gt;&gt; a relational database. In 25 years, the only time I&#39;ve ever seen a join not<br>
&gt;&gt; be faster than decomposing into multiple queries is when the queries involve<br>
&gt;&gt; millions of rows in one or more tables, and/or when the RDBMs query<br>
&gt;&gt; optimizer ran into a pathological case, or a bug.<br>
&gt;&gt;<br>
&gt;&gt; Try an experiment.  Benchmark the query using a column-specified prefetch,<br>
&gt;&gt; and then benchmark running the first query, extracting the list of foreign<br>
&gt;&gt; keys, and runnign a second query to return all of those. I&#39;d like to see the<br>
&gt;&gt; difference.<br>
&gt;&gt;<br>
&gt;&gt; I predict that for 100 records, the difference in execution time will be<br>
&gt;&gt; below the threshold where it makes any sense to optimize the join away.<br>
&gt;&gt;<br>
&gt;&gt; Len.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Apr 28, 2015 at 6:37 PM, Kevin Karabian &lt;<a href="mailto:kkarabian@turnitin.com">kkarabian@turnitin.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Yes, but the problem is for a has_many, prefetch causes multiple rows to<br>
&gt;&gt;&gt; be returned.  For example if a result object has 10 related objects then 10<br>
&gt;&gt;&gt; rows are returned for that one object.  If the result object is large, then<br>
&gt;&gt;&gt; that is a lot of repetition.  I want to basically run a query that will<br>
&gt;&gt;&gt; return only the 10 related objects and then put those into the result object<br>
&gt;&gt;&gt; eliminating the repetition.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; And actually my use case is that I want to do this for a large number or<br>
&gt;&gt;&gt; result objects so I am amortizing the cost by grabbing all the related<br>
&gt;&gt;&gt; objects for all the result objects in question.  So say, I have 10 objects<br>
&gt;&gt;&gt; and each has 10 related objects.  I get the 100 related objects at once and<br>
&gt;&gt;&gt; populate the result objects with the relationship data.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Tue, Apr 28, 2015 at 3:27 PM, Dagfinn Ilmari Mannsåker<br>
&gt;&gt;&gt; &lt;<a href="mailto:ilmari@ilmari.org">ilmari@ilmari.org</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Kevin Karabian &lt;<a href="mailto:kkarabian@turnitin.com">kkarabian@turnitin.com</a>&gt; writes:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; Hi,<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Is there a way to store already retrieved related objects (related as<br>
&gt;&gt;&gt;&gt; &gt; a<br>
&gt;&gt;&gt;&gt; &gt; has_many) in a result object, such that calling the accessor for that<br>
&gt;&gt;&gt;&gt; &gt; relationship data will not hit the db again.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; This is exactly what prefetch is for.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; <a href="https://metacpan.org/pod/DBIx::Class::ResultSet#prefetch" target="_blank">https://metacpan.org/pod/DBIx::Class::ResultSet#prefetch</a><br>
&gt;&gt;&gt;&gt; <a href="https://metacpan.org/pod/DBIx::Class::ResultSet#PREFETCHING" target="_blank">https://metacpan.org/pod/DBIx::Class::ResultSet#PREFETCHING</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; --<br>
&gt;&gt;&gt;&gt; - Twitter seems more influential [than blogs] in the &#39;gets reported in<br>
&gt;&gt;&gt;&gt;   the mainstream press&#39; sense at least.               - Matt McLeod<br>
&gt;&gt;&gt;&gt; - That&#39;d be because the content of a tweet is easier to condense down<br>
&gt;&gt;&gt;&gt;   to a mainstream media article.                      - Calle Dybedahl<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; List: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class" target="_blank">http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class</a><br>
&gt;&gt;&gt;&gt; IRC: <a href="http://irc.perl.org#dbix-class" target="_blank">irc.perl.org#dbix-class</a><br>
&gt;&gt;&gt;&gt; SVN: <a href="http://dev.catalyst.perl.org/repos/bast/DBIx-Class/" target="_blank">http://dev.catalyst.perl.org/repos/bast/DBIx-Class/</a><br>
&gt;&gt;&gt;&gt; Searchable Archive:<br>
&gt;&gt;&gt;&gt; <a href="http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk" target="_blank">http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; Kevin Karabian<br>
&gt;&gt;&gt; Senior Engineer<br>
&gt;&gt;&gt; Turnitin – <a href="http://www.turnitin.com" target="_blank">www.turnitin.com</a><br>
&gt;&gt;&gt; <a href="mailto:kkarabian@turnitin.com">kkarabian@turnitin.com</a><br>
&gt;&gt;&gt; <a href="tel:510.764.7529" value="+15107647529">510.764.7529</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; List: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class" target="_blank">http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class</a><br>
&gt;&gt;&gt; IRC: <a href="http://irc.perl.org#dbix-class" target="_blank">irc.perl.org#dbix-class</a><br>
&gt;&gt;&gt; SVN: <a href="http://dev.catalyst.perl.org/repos/bast/DBIx-Class/" target="_blank">http://dev.catalyst.perl.org/repos/bast/DBIx-Class/</a><br>
&gt;&gt;&gt; Searchable Archive:<br>
&gt;&gt;&gt; <a href="http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk" target="_blank">http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Len Jaffe - Information Technology Smoke Jumper -<br>
&gt;&gt; <a href="mailto:lenjaffe@jaffesystems.com">lenjaffe@jaffesystems.com</a><br>
&gt;&gt; <a href="tel:614-404-4214" value="+16144044214">614-404-4214</a>    @LenJaffe  <a href="http://www.lenjaffe.com" target="_blank">www.lenjaffe.com</a><br>
&gt;&gt; Host of Columbus Code Jam  - @CodeJamCMH<br>
&gt;&gt; Curator of Advent Planet - An Aggregation of Online Advent Calendars.<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; List: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class" target="_blank">http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class</a><br>
&gt;&gt; IRC: <a href="http://irc.perl.org#dbix-class" target="_blank">irc.perl.org#dbix-class</a><br>
&gt;&gt; SVN: <a href="http://dev.catalyst.perl.org/repos/bast/DBIx-Class/" target="_blank">http://dev.catalyst.perl.org/repos/bast/DBIx-Class/</a><br>
&gt;&gt; Searchable Archive:<br>
&gt;&gt; <a href="http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk" target="_blank">http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Kevin Karabian<br>
&gt; Senior Engineer<br>
&gt; Turnitin – <a href="http://www.turnitin.com" target="_blank">www.turnitin.com</a><br>
&gt; <a href="mailto:kkarabian@turnitin.com">kkarabian@turnitin.com</a><br>
&gt; <a href="tel:510.764.7529" value="+15107647529">510.764.7529</a><br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; List: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class" target="_blank">http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class</a><br>
&gt; IRC: <a href="http://irc.perl.org#dbix-class" target="_blank">irc.perl.org#dbix-class</a><br>
&gt; SVN: <a href="http://dev.catalyst.perl.org/repos/bast/DBIx-Class/" target="_blank">http://dev.catalyst.perl.org/repos/bast/DBIx-Class/</a><br>
&gt; Searchable Archive:<br>
&gt; <a href="http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk" target="_blank">http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk</a><br>
<br>
<br>
<br>
--<br>
</div></div>//wbr, Dmitry L.<br>
<div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
List: <a href="http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class" target="_blank">http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class</a><br>
IRC: <a href="http://irc.perl.org#dbix-class" target="_blank">irc.perl.org#dbix-class</a><br>
SVN: <a href="http://dev.catalyst.perl.org/repos/bast/DBIx-Class/" target="_blank">http://dev.catalyst.perl.org/repos/bast/DBIx-Class/</a><br>
Searchable Archive: <a href="http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk" target="_blank">http://www.grokbase.com/group/dbix-class@lists.scsys.co.uk</a></div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><b style="font-family:Times"><font size="1"><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap">Kevin Karabian</span><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap"></span><br><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap">Senior Engineer</span><br><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap">Turnitin – </span><a href="http://www.turnitin.com/" target="_blank"><span style="font-family:Arial;color:rgb(0,0,255);font-weight:normal;vertical-align:baseline;white-space:pre-wrap">www.turnitin.com</span></a><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap"></span><br><span style="font-family:Arial;color:rgb(0,0,255);font-weight:normal;vertical-align:baseline;white-space:pre-wrap">kkarabian<a href="mailto:jdoe@turnitin.com" target="_blank">@turnitin.com</a></span><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap"></span><br><span style="font-family:Arial;font-weight:normal;vertical-align:baseline;white-space:pre-wrap">510.764.7529</span></font></b></div>
</div>