{"title":"Optamú ar rochtain bunachar","version":"6.1","locale":"ga","docname":"topics/db/optimization","url":"/ga/6.1/topics/db/optimization/","canonical":"https://djangodocs.dev/ga/6.1/topics/db/optimization/","summary":"Soláthraíonn ciseal bunachar sonraí Django bealaí éagsúla chun cabhrú le forbróirí an leas is fearr a bhaint as a mbunachar Bailíonn an doiciméad seo naisc leis an…","html":"<h1>Optamú ar rochtain bunachar<a class=\"heading-anchor\" href=\"#database-access-optimization\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Soláthraíonn ciseal bunachar sonraí Django bealaí éagsúla chun cabhrú le forbróirí an leas is fearr a bhaint as a mbunachar Bailíonn an doiciméad seo naisc leis an doiciméad ábhartha le chéile, agus cuireann sé leideanna éagsúla leis, eagraithe faoi roinnt ceannteidil a thugann cur síos ar na céimeanna atá le glacadh agus tú ag iarraidh úsáid do bhunachar sonraí a</p>\n<section id=\"profile-first\">\n<h2>Próifíl ar dtús<a class=\"heading-anchor\" href=\"#profile-first\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Mar chleachtas cláraithe ginearálta, téann sé seo gan rá. &lt;faq-see-raw-sql-queries&gt;Faigh amach: ref: cad iad na ceisteanna atá á dhéanamh agat agus cad a chosnaíonn siad duit `. Úsáid: Meth: `.querySet.explain chun tuiscint a fháil ar cé chomh sonrach a fhorghníomhaíonn do bhunachar sonraí <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s. B'fhéidir gur mhaith leat tionscadal seachtrach a úsáid freisin cosúil:pypi: django-debug-toolbar, nó uirlis a dhéanann monatóireacht díreach ar do bhunachar sonraí.</p>\n<p>Cuimhnigh go bhféadfadh tú a bheith ag barrfheabhsú le haghaidh luas nó cuimhne nó araon, ag brath ar do riachtanais Uaireanta beidh barrfheabhsú do cheann amháin díobhálach don cheann eile, ach uaireanta cabhróidh siad lena chéile. Chomh maith leis sin, b'fhéidir nach mbeadh an costas céanna (duitse) ag an obair a dhéanann an próiseas bunachar sonraí leis an méid céanna oibre a dhéantar i do phróiseas Python. Is fútsa atá sé cinneadh a dhéanamh cad iad do thosaíochtaí, cá gcaithfidh an t-iarmhéid a bheith, agus iad seo go léir a phróifíliú de réir mar is gá ós rud é go mbeidh sé seo ag brath ar d'iarratas agus ar d'fhre</p>\n<p>Le gach rud a leanann, cuimhnigh próifíl a dhéanamh tar éis gach athraithe chun a chinntiú gur sochar é an t-athrú, agus sochar mór go leor i bhfianaise an laghdú ar inléiteacht do chód. ** Tagann gach ceann de na moltaí thíos leis an rabhadh go bhféadfadh an prionsabal ginearálta a bheith i bhfeidhm i do chúinsí, nó go bhféadfadh sé a aisiompú fiú.</p>\n</section>\n<section id=\"use-standard-db-optimization-techniques\">\n<h2>Bain úsáid as teicnící caighdeánacha<a class=\"heading-anchor\" href=\"#use-standard-db-optimization-techniques\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>... lena n-áirítear:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Database_index\">Indexes</a>. This is a number one priority, <em>after</em> you have determined from\nprofiling what indexes should be added. Use\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/options/#django.db.models.Options.indexes\" title=\"django.db.models.Options.indexes\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.indexes</span></code></a> or\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/fields/#django.db.models.Field.db_index\" title=\"django.db.models.Field.db_index\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Field.db_index</span></code></a> to add these from\nDjango. Consider adding indexes to fields that you frequently query using\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.filter\" title=\"django.db.models.query.QuerySet.filter\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">filter()</span></code></a>,\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.exclude\" title=\"django.db.models.query.QuerySet.exclude\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">exclude()</span></code></a>,\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a>, etc. as indexes may help\nto speed up lookups. Note that determining the best indexes is a complex\ndatabase-dependent topic that will depend on your particular application.\nThe overhead of maintaining an index may outweigh any gains in query speed.</p></li>\n</ul>\n<ul class=\"simple\">\n<li><p>Úsáid chuí de chineálacha réimse.</p></li>\n</ul>\n<p>Glacfaimid leis go ndearna tú na rudaí atá liostaithe thuas. Díríonn an chuid eile den doiciméad seo ar conas Django a úsáid sa chaoi nach bhfuil tú ag déanamh obair gan ghá. Ní thugann an doiciméad seo aghaidh freisin ar theicnící optamaithe eile a bhaineann le gach oibríocht daor, mar shampla:doc: taiscáil cuspóir ginear&lt;/topics/cache&gt; álta.</p>\n</section>\n<section id=\"understand-querysets\">\n<h2>Tuiscint a fháil ar <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code>s<a class=\"heading-anchor\" href=\"#understand-querysets\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tuiscint: doc: Tá QuerySets &lt;/ref/models/querysets&gt; ríthábhachtach chun feidhmíocht mhaith a fháil le cód simplí. Go háirithe:</p>\n<section id=\"understand-queryset-evaluation\">\n<h3>Meastóireacht <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a thuiscint<a class=\"heading-anchor\" href=\"#understand-queryset-evaluation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Chun fadhbanna feidhmíochta a sheachaint, tá sé tábhachtach tuiscint:</p>\n<ul class=\"simple\">\n<li><p>&lt;querysets-are-lazy&gt;that:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>Tá ceisteanna leisciúil <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p></li>\n<li><p>&lt;when-querysets-are-evaluated&gt;when: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>déantar iad a mheas <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p></li>\n<li><p>&lt;caching-and-querysets&gt;cona:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>coinnítear na sonraí i gcuimhne <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>.</p></li>\n</ul>\n</section>\n<section id=\"understand-cached-attributes\">\n<h3>Tréithe taiscéadta a thuiscint<a class=\"heading-anchor\" href=\"#understand-cached-attributes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Chomh maith le caistriú an <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>iomlán, tá toradh tréithe ar rudaí ORM a chaitheamh a chaitheamh. Go ginearálta, déanfar tréithe nach féidir glaoch a stóráil. &lt;queryset-model-example&gt;Mar shampla, ag glacadh leis na:ref: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>samplaí blag samplacha <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">blog</span>  <span class=\"c1\"># Blog object is retrieved at this point</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">blog</span>  <span class=\"c1\"># cached version, no DB access</span>\n</code></pre></div>\n<p>Ach go ginearálta, is cúis le tréithe inghlaonta cuardach DB gach uair:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>  <span class=\"c1\"># query performed</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>  <span class=\"c1\"># query performed again</span>\n</code></pre></div>\n<p>Bí cúramach agus tú ag léamh cód teimpléid - ní cheadaíonn an córas teimpléid lúibíní a úsáid, ach glaoifidh sé glaonna go huathoibríoch, ag folach an t-idirdhealú thuas.</p>\n<p>Bí cúramach le d'airíonna saincheaptha féin - is fútsa atá sé caching a chur i bhfeidhm nuair is gá, mar shampla ag baint úsáide as an maisitheoir: class: ~django.utils.functional.cached_property.</p>\n</section>\n<section id=\"use-the-with-template-tag\">\n<h3>Úsáid an chlib teimpléad <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>with`<a class=\"heading-anchor\" href=\"#use-the-with-template-tag\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Chun úsáid a bhaint as iompar caching <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, b'fhéidir go mbeidh ort an chlib teimpléad:ttag: with a úsáid.</p>\n</section>\n<section id=\"use-iterator\">\n<h3>Úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>iterator () ``<a class=\"heading-anchor\" href=\"#use-iterator\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When you have a lot of objects, the caching behavior of the <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> can\ncause a large amount of memory to be used. In this case,\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.iterator\" title=\"django.db.models.query.QuerySet.iterator\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">iterator()</span></code></a> may help.</p>\n</section>\n<section id=\"use-explain\">\n<h3>Úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>mhínigh () ``<a class=\"heading-anchor\" href=\"#use-explain\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p><a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.explain\" title=\"django.db.models.query.QuerySet.explain\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">QuerySet.explain()</span></code></a> gives you detailed information about how the database\nexecutes a query, including indexes and joins that are used. These details may\nhelp you find queries that could be rewritten more efficiently, or identify\nindexes that could be added to improve performance.</p>\n</section>\n</section>\n<section id=\"do-database-work-in-the-database-rather-than-in-python\">\n<h2>An oibríonn bunachar sonraí sa bhunachar sonraí seachas i Python<a class=\"heading-anchor\" href=\"#do-database-work-in-the-database-rather-than-in-python\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Mar shampla:</p>\n<ul class=\"simple\">\n<li><p>Ag an leibhéal is bunúsaí, bain úsáid as: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>scagadh agus eisiamh &lt;queryset-api&gt;`chun scagadh a dhéanamh sa bhunachar sonraí.</p></li>\n<li><p>Use <a class=\"reference internal\" href=\"/ga/6.1/ref/models/expressions/#f-expressions\"><span class=\"std std-ref\">Nathanna ``F () ``</span></a> to filter based on other fields within the same\nmodel.</p></li>\n<li><p>Úsáid:doc: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>anótáil chun comhiomlánú a dhéanamh sa bhunachar sonraithe' &lt;/topics/db/aggregation&gt;.</p></li>\n</ul>\n<p>Mura leor iad seo chun an SQL a theastaíonn uait a ghiniúint:</p>\n<section id=\"use-rawsql\">\n<h3>Úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">Rawsql</span></code><a class=\"heading-anchor\" href=\"#use-rawsql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Modh nach bhfuil chomh iniompartha ach níos cumhachtaí ná an léir:class: ~Django.db.Models.Expressions.RawSql, a ligeann roinnt SQL a chur go sainráite leis an bhfiosrúchán. Mura bhfuil sé sin cumhachtach go leor fós:</p>\n</section>\n<section id=\"use-raw-sql\">\n<h3>Úsáid SQL amh<a class=\"heading-anchor\" href=\"#use-raw-sql\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Scríobh do chuid féin: doc: SQL saincheaptha chun sonraí a aisghabháil nó samhlacha a dhaonrú '&lt;/topics/db/sql&gt;. Úsáid ``django.db.connection.queries` chun a fháil amach cad atá ag scríobh Django duit agus tosú as sin.</p>\n</section>\n</section>\n<section id=\"retrieve-individual-objects-using-a-unique-indexed-column\">\n<h2>Aisghabháil rudaí aonair ag úsáid colún uathúil, innéacsaithe<a class=\"heading-anchor\" href=\"#retrieve-individual-objects-using-a-unique-indexed-column\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Tá dhá chúis ann le colún a úsáid le:attr: ~django.db.models.field.unique nó:attr: ~django.db.models.field.db_index agus tú ag úsáid: meth: ~django.db.models.queryset.get chun rudaí aonair a aisghabháil. Ar dtús, beidh an cheist níos gasta mar gheall ar an innéacs bunachar sonraí bunúsach. Chomh maith leis sin, d'fhéadfadh an cheist rith i bhfad níos moille má mheaitseálann ilrudaí leis an lorg; ráthaíonn srian uathúil a bheith agat ar an gcolún nach dtarlóidh sé seo riamh.</p>\n<p>&lt;queryset-model-example&gt;Mar sin ag baint úsáide as an: ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>sampla samhlacha blag <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>beidh sé níos gasta ná:</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;News Item Title&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>toisc go ndéanann an bunachar sonraí innéacsaithe <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>id <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>agus ráthaítear go mbeidh sé uathúil.</p>\n<p>D'fhéadfadh sé go mbeadh sé mall go leor na nithe seo a leanas</p>\n<div class=\"code-block\" data-language=\"pycon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Python console</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Python console code\"><code><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">entry</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">headline__startswith</span><span class=\"o\">=</span><span class=\"s2\">&quot;News&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Ar an gcéad dul síos, ní innéacsaítear <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>ceannlíne <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, rud a fhágfaidh go bhfaighidh an bunachar sonraí bunúsach níos moille.</p>\n<p>Second, the lookup may return multiple results. Even though Django applies a\nlimit of 21 objects when using <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.get\" title=\"django.db.models.query.QuerySet.get\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">get()</span></code></a>,\nthe database may still need to scan everything to evaluate a non-unique\ncondition. Narrowing your query up-front is more efficient.</p>\n</section>\n<section id=\"retrieve-related-objects-efficiently\">\n<h2>Retrieve related objects efficiently<a class=\"heading-anchor\" href=\"#retrieve-related-objects-efficiently\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Generally, accessing the database multiple times to retrieve different parts\nof a single &quot;set&quot; of data is less efficient than retrieving it all in one\nquery. This is particularly important if you have a query that is executed in a\nloop, and could therefore end up doing many database queries, when only one\nis needed. Below are some techniques to combine queries for efficiency.</p>\n<section id=\"use-the-fetch-peers-fetch-mode\">\n<h3>Use the <code class=\"docutils literal notranslate\"><span class=\"pre\">FETCH_PEERS</span></code> fetch mode<a class=\"heading-anchor\" href=\"#use-the-fetch-peers-fetch-mode\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Use the <a class=\"reference internal\" href=\"/ga/6.1/topics/db/fetch-modes/#django.db.models.FETCH_PEERS\" title=\"django.db.models.FETCH_PEERS\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">FETCH_PEERS</span></code></a> fetch mode to make on-demand\nfield access more efficient with bulk-fetching. Enable it for all usage of\nyour models <a class=\"reference internal\" href=\"/ga/6.1/topics/db/fetch-modes/#fetch-modes-custom-manager\"><span class=\"std std-ref\">with a custom manager</span></a>.</p>\n<p>Using this fetch mode is easier than declaring fields to fetch with\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a> or\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code></a>, especially when it's\nhard to predict which fields will be accessed.</p>\n</section>\n<section id=\"use-queryset-select-related-and-prefetch-related\">\n<h3>Úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.Select_related</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``prefetch_related</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#use-queryset-select-related-and-prefetch-related\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When the <a class=\"reference internal\" href=\"/ga/6.1/topics/db/fetch-modes/#django.db.models.FETCH_PEERS\" title=\"django.db.models.FETCH_PEERS\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">FETCH_PEERS</span></code></a> fetch mode is not appropriate or\nefficient enough, use <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.select_related\" title=\"django.db.models.query.QuerySet.select_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">select_related()</span></code></a>\nand <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">prefetch_related()</span></code></a>. Understand their\ndocumentation thoroughly and apply them where needed.</p>\n<p>It may be useful to apply these methods in <a class=\"reference internal\" href=\"/ga/6.1/topics/db/managers/\"><span class=\"doc\">managers and default managers</span></a>. Be aware when your manager is and is not used; for\nexample, related object access <a class=\"reference internal\" href=\"/ga/6.1/topics/db/managers/#managers-for-related-objects\"><span class=\"std std-ref\">uses the base manager</span></a> rather than the default manager.</p>\n</section>\n<section id=\"use-prefetch-related-objects\">\n<h3>Use <code class=\"docutils literal notranslate\"><span class=\"pre\">prefetch_related_objects()</span></code><a class=\"heading-anchor\" href=\"#use-prefetch-related-objects\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Where <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.prefetch_related\" title=\"django.db.models.query.QuerySet.prefetch_related\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">prefetch_related</span></code></a> would be useful\nafter the queryset has been evaluated, use\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.prefetch_related_objects\" title=\"django.db.models.prefetch_related_objects\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">prefetch_related_objects()</span></code></a> to execute an extra\nprefetch.</p>\n</section>\n</section>\n<section id=\"don-t-retrieve-things-you-don-t-need\">\n<h2>Ná aisghabháil rudaí nach dteastaíonn uait<a class=\"heading-anchor\" href=\"#don-t-retrieve-things-you-don-t-need\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"use-queryset-values-and-values-list\">\n<h3>Úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.values</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``values_list</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#use-queryset-values-and-values-list\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When you only want a <code class=\"docutils literal notranslate\"><span class=\"pre\">dict</span></code> or <code class=\"docutils literal notranslate\"><span class=\"pre\">list</span></code> of values, and don't need ORM model\nobjects, make appropriate usage of\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.values\" title=\"django.db.models.query.QuerySet.values\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">values()</span></code></a>.\nThese can be useful for replacing model objects in template code - as long as\nthe dicts you supply have the same attributes as those used in the template,\nyou are fine.</p>\n</section>\n<section id=\"use-queryset-defer-and-only\">\n<h3>Úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.defer</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``only</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#use-queryset-defer-and-only\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Use <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.defer\" title=\"django.db.models.query.QuerySet.defer\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">defer()</span></code></a> and\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.only\" title=\"django.db.models.query.QuerySet.only\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">only()</span></code></a> if there are database columns\nyou know that you won't need (or won't need in most cases) to avoid loading\nthem. Note that if you <em>do</em> use them, the ORM will have to go and get them in\na separate query, making this a pessimization if you use it inappropriately.</p>\n<p>Ná bí ró-ionsaitheach agus réimsí a chur ar iarchur gan próifíliú mar caithfidh an bunachar sonraí an chuid is mó de na sonraí neamh-téacs, neamh-Varchar a léamh ón diosca ar feadh sraith amháin sna torthaí, fiú mura gcríochnaíonn sé ach cúpla colún á úsáid. Tá na modhanna <code class=\"docutils literal notranslate\"><span class=\"pre\">defer</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``only</span> <span class=\"pre\">()</span></code> is úsáideach nuair is féidir leat a lán sonraí téacs a luchtú a sheachaint nó do réimsí a d'fhéadfadh go leor próiseála a thógáil chun tiontú ar ais go Python. Mar is gnách, próifíl ar dtús, ansin barrfheabhsú.</p>\n</section>\n<section id=\"use-queryset-contains-obj\">\n<h3>Úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet.contents (obj) ``<a class=\"heading-anchor\" href=\"#use-queryset-contains-obj\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>... mura dteastaíonn uait ach a fháil amach an bhfuil <code class=\"docutils literal notranslate\"><span class=\"pre\">obj</span> <span class=\"pre\">``sa</span> <span class=\"pre\">tacar</span> <span class=\"pre\">fiosrúcháin,</span> <span class=\"pre\">seachas</span> <span class=\"pre\">``if</span> <span class=\"pre\">obj</span> <span class=\"pre\">in</span> <span class=\"pre\">iarratas</span></code>.</p>\n</section>\n<section id=\"use-queryset-count\">\n<h3>Úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet.count () ``<a class=\"heading-anchor\" href=\"#use-queryset-count\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>... mura dteastaíonn uait ach an comhaireamh, seachas <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>len (queryset) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>a dhéanamh.</p>\n</section>\n<section id=\"use-queryset-exists\">\n<h3>Úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet.exists () ``<a class=\"heading-anchor\" href=\"#use-queryset-exists\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>... mura dteastaíonn uait ach a fháil amach an bhfuil toradh amháin ar a laghad ann, seachas <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>if queryset <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>.</p>\n<p>Ach:</p>\n</section>\n<section id=\"don-t-overuse-contains-count-and-exists\">\n<span id=\"overuse-of-count-and-exists\"></span><h3>Ná ró-úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">tá</span> <span class=\"pre\">()</span> <span class=\"pre\">``,</span> <span class=\"pre\">`count</span> <span class=\"pre\">()</span></code>, agus <code class=\"docutils literal notranslate\"><span class=\"pre\">ann</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#don-t-overuse-contains-count-and-exists\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Má tá sonraí eile ag teastáil uait ón QuerySet, déan iad a mheas láithreach.</p>\n<p>Mar shampla, ag glacadh le samhail <code class=\"docutils literal notranslate\"><span class=\"pre\">Grúpa</span></code> a bhfuil gaol go leor aige le <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>Úsáideoir <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>, is fearr an cód seo a leanas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">members</span> <span class=\"o\">=</span> <span class=\"n\">group</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n\n<span class=\"k\">if</span> <span class=\"n\">display_group_members</span><span class=\"p\">:</span>\n    <span class=\"k\">if</span> <span class=\"n\">members</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">current_user</span> <span class=\"ow\">in</span> <span class=\"n\">members</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;You and&quot;</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">members</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s2\">&quot;other users are members of this group.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;There are&quot;</span><span class=\"p\">,</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">members</span><span class=\"p\">),</span> <span class=\"s2\">&quot;members in this group.&quot;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">member</span> <span class=\"ow\">in</span> <span class=\"n\">members</span><span class=\"p\">:</span>\n            <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"nb\">print</span><span class=\"p\">(</span><span class=\"s2\">&quot;There are no members in this group.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Tá sé is fearr mar gheall ar:</p>\n<ol class=\"arabic simple\">\n<li><p>Ós rud é go bhfuil QuerySets leisciúil, ní dhéanann sé seo aon cheisteanna bunachar sonraí má tá <code class=\"docutils literal notranslate\"><span class=\"pre\">display_group_members</span></code> False`.</p></li>\n<li><p>Trí stóráil <code class=\"docutils literal notranslate\"><span class=\"pre\">group.members.all</span> <span class=\"pre\">()</span> <span class=\"pre\">``sa</span> <span class=\"pre\">athróg</span> <span class=\"pre\">``members</span></code> is féidir a taisce torthaí a athúsáid.</p></li>\n<li><p>Tá an líne <code class=\"docutils literal notranslate\"><span class=\"pre\">if</span> <span class=\"pre\">comhaltaí:</span> <span class=\"pre\">``is</span> <span class=\"pre\">cúis</span> <span class=\"pre\">le</span> <span class=\"pre\">``QuerySet.</span> <span class=\"pre\">__bool__</span> <span class=\"pre\">()</span> <span class=\"pre\">``le</span> <span class=\"pre\">glaoch,</span> <span class=\"pre\">rud</span> <span class=\"pre\">a</span> <span class=\"pre\">fhágann</span> <span class=\"pre\">go</span> <span class=\"pre\">ndéanfar</span> <span class=\"pre\">an</span> <span class=\"pre\">ceist</span> <span class=\"pre\">``group.members.all</span> <span class=\"pre\">()</span></code> a reáchtáil ar an mbunachar sonraí. Mura bhfuil aon torthaí ann, cuirfidh sé ar ais <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>, ar shlí eile <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>.</p></li>\n<li><p>Seiceálann an líne <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>if current_user i gcomhaltaí: <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>an bhfuil an t-úsáideoir sa taisce torthaí, mar sin ní eisítear aon cheisteanna breise bunachar sonraí.</p></li>\n<li><p>Glaonn úsáid <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>len (comhaltaí) <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>QuerySet. __len__ () `, ag athúsáid taisce na dtorthaí, mar sin arís, ní eisítear aon cheisteanna bunachar sonraí.</p></li>\n<li><p>Athraíonn an lúb for ball` thar taisce na torthaí.</p></li>\n</ol>\n<p>San iomlán, déanann an cód seo ceisteanna bunachar sonraí amháin nó nialas. Is é an t-aon bharrfheabhsú d'aon ghnó a dhéantar ná an athróg <code class=\"docutils literal notranslate\"><span class=\"pre\">baill</span> <span class=\"pre\">``a</span> <span class=\"pre\">úsáid.</span> <span class=\"pre\">Ag</span> <span class=\"pre\">baint</span> <span class=\"pre\">úsáide</span> <span class=\"pre\">as</span> <span class=\"pre\">``QuerySet.exists</span> <span class=\"pre\">()</span> <span class=\"pre\">``don</span> <span class=\"pre\">`if</span></code>, QuerySet.contents () ```, <code class=\"docutils literal notranslate\"><span class=\"pre\">`in</span></code>, nó <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>QuerySet.count () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>don chomhaireamh bheadh ceisteanna breise ina chúis le ceisteanna breise.</p>\n</section>\n<section id=\"use-queryset-update-and-delete\">\n<h3>Úsáid <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet.Update</span> <span class=\"pre\">()</span> <span class=\"pre\">``agus</span> <span class=\"pre\">``delete</span> <span class=\"pre\">()</span></code><a class=\"heading-anchor\" href=\"#use-queryset-update-and-delete\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>&lt;topics-db-queries-update&gt;Seachas ualach rudaí a aisghabháil, socraigh roinnt luachanna, agus iad a shábháil aonair, bain úsáid as ráiteas mórchóir SQL UPDATE, trí:ref: <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">`</span></a>QuerySet.update () <a href=\"#id3\"><span class=\"problematic\" id=\"id4\">`</span></a>. &lt;topics-db-queries-delete&gt;Ar an gcaoi chéanna, déan:ref: <a href=\"#id5\"><span class=\"problematic\" id=\"id6\">`</span></a>bulk scriosann <a href=\"#id7\"><span class=\"problematic\" id=\"id8\">`</span></a>nuair is féidir.</p>\n<p>Tabhair faoi deara, áfach, nach féidir leis na modhanna mór-nuashonraithe seo na modhanna <code class=\"docutils literal notranslate\"><span class=\"pre\">save</span> <span class=\"pre\">()</span> <span class=\"pre\">``nó</span> <span class=\"pre\">``delete</span> <span class=\"pre\">()</span></code> cásanna aonair a ghlaoch, rud a chiallaíonn nach gcuirfear aon iompar saincheaptha a chuir tú leis do na modhanna seo a fhorghníomhú, lena n-áirítear aon rud atá tiomáinte ón ngnáthréad bunachar sonraí: doc: signals &lt;/ref/signals&gt;.</p>\n</section>\n<section id=\"use-foreign-key-values-directly\">\n<h3>Úsáid luachanna eachtracha go díreach<a class=\"heading-anchor\" href=\"#use-foreign-key-values-directly\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Mura dteastaíonn uait ach luach eochair eachtrach, bain úsáid as an eochairluach eachtrach atá ar an réad atá agat cheana féin, seachas an réad gaolmhar iomlán a fháil agus a phríomh-eochair a ghlacadh. ie déan:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">blog_id</span>\n</code></pre></div>\n<p>in ionad:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entry</span><span class=\"o\">.</span><span class=\"n\">blog</span><span class=\"o\">.</span><span class=\"n\">id</span>\n</code></pre></div>\n</section>\n<section id=\"don-t-order-results-if-you-don-t-care\">\n<h3>Ná ordaigh torthaí mura bhfuil cúram ort<a class=\"heading-anchor\" href=\"#don-t-order-results-if-you-don-t-care\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Ordering is not free; each field to order by is an operation the database must\nperform. If a model has a default ordering (<a class=\"reference internal\" href=\"/ga/6.1/ref/models/options/#django.db.models.Options.ordering\" title=\"django.db.models.Options.ordering\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">Meta.ordering</span></code></a>) and you don't need it, remove\nit on a <code class=\"docutils literal notranslate\"><span class=\"pre\">QuerySet</span></code> by calling\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.order_by\" title=\"django.db.models.query.QuerySet.order_by\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">order_by()</span></code></a> with no parameters.</p>\n<p>D'fhéadfadh innéacs a chur le do bhunachar sonraí cabhrú le feidhmíocht ordaithe a fheabhsú</p>\n</section>\n</section>\n<section id=\"use-bulk-methods\">\n<h2>Úsáid modhanna mórchóir<a class=\"heading-anchor\" href=\"#use-bulk-methods\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Úsáid modhanna mórchóir chun líon na ráitis SQL a laghdú.</p>\n<section id=\"create-in-bulk\">\n<h3>Cruthaigh ar an mórchóir<a class=\"heading-anchor\" href=\"#create-in-bulk\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When creating objects, where possible, use the\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create\" title=\"django.db.models.query.QuerySet.bulk_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">bulk_create()</span></code></a> method to reduce the\nnumber of SQL queries. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is a test&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is only a test&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>... is fearr ná:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is a test&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is only a test&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Note that <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create\" title=\"django.db.models.query.QuerySet.bulk_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">bulk_create()</span></code></a> has several\ncaveats, so ensure it's appropriate for your use case.</p>\n</section>\n<section id=\"update-in-bulk\">\n<h3>Nuashonrú i mórchóir<a class=\"heading-anchor\" href=\"#update-in-bulk\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>When updating objects, where possible, use the\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.bulk_update\" title=\"django.db.models.query.QuerySet.bulk_update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">bulk_update()</span></code></a> method to reduce the\nnumber of SQL queries. Given a list or queryset of objects:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entries</span> <span class=\"o\">=</span> <span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is a test&quot;</span><span class=\"p\">),</span>\n        <span class=\"n\">Entry</span><span class=\"p\">(</span><span class=\"n\">headline</span><span class=\"o\">=</span><span class=\"s2\">&quot;This is only a test&quot;</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>An sampla seo a leanas:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entries</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is not a test&quot;</span>\n<span class=\"n\">entries</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is no longer a test&quot;</span>\n<span class=\"n\">Entry</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_update</span><span class=\"p\">(</span><span class=\"n\">entries</span><span class=\"p\">,</span> <span class=\"p\">[</span><span class=\"s2\">&quot;headline&quot;</span><span class=\"p\">])</span>\n</code></pre></div>\n<p>... is fearr ná:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">entries</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is not a test&quot;</span>\n<span class=\"n\">entries</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n<span class=\"n\">entries</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">headline</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;This is no longer a test&quot;</span>\n<span class=\"n\">entries</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>Note that <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.bulk_update\" title=\"django.db.models.query.QuerySet.bulk_update\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">bulk_update()</span></code></a> has several\ncaveats, so ensure it's appropriate for your use case.</p>\n</section>\n<section id=\"insert-in-bulk\">\n<h3>Cuir isteach sa mórchóir<a class=\"heading-anchor\" href=\"#insert-in-bulk\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Agus rudaí á chur isteach ion:class: ManyTomanyFields &lt;django.db.models.ManyToManyField&gt;, bain úsáid as: meth: ~Django.db.Models.Fields.Related.RelatedManager.Add le rudaí iolracha chun líon na gceisteanna SQL a laghdú. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_band</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">me</span><span class=\"p\">,</span> <span class=\"n\">my_friend</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>... is fearr ná:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_band</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">me</span><span class=\"p\">)</span>\n<span class=\"n\">my_band</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">my_friend</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...where <code class=\"docutils literal notranslate\"><span class=\"pre\">Band</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">Artist</span></code> are models with a many-to-many relationship.</p>\n<p>When inserting different pairs of objects into\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/fields/#django.db.models.ManyToManyField\" title=\"django.db.models.ManyToManyField\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManyToManyField</span></code></a> or when the custom\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/fields/#django.db.models.ManyToManyField.through\" title=\"django.db.models.ManyToManyField.through\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">through</span></code></a> table is defined, use\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.bulk_create\" title=\"django.db.models.query.QuerySet.bulk_create\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">bulk_create()</span></code></a> method to reduce the\nnumber of SQL queries. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">PizzaToppingRelationship</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">through</span>\n<span class=\"n\">PizzaToppingRelationship</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">bulk_create</span><span class=\"p\">(</span>\n    <span class=\"p\">[</span>\n        <span class=\"n\">PizzaToppingRelationship</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">=</span><span class=\"n\">my_pizza</span><span class=\"p\">,</span> <span class=\"n\">topping</span><span class=\"o\">=</span><span class=\"n\">pepperoni</span><span class=\"p\">),</span>\n        <span class=\"n\">PizzaToppingRelationship</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">=</span><span class=\"n\">your_pizza</span><span class=\"p\">,</span> <span class=\"n\">topping</span><span class=\"o\">=</span><span class=\"n\">pepperoni</span><span class=\"p\">),</span>\n        <span class=\"n\">PizzaToppingRelationship</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">=</span><span class=\"n\">your_pizza</span><span class=\"p\">,</span> <span class=\"n\">topping</span><span class=\"o\">=</span><span class=\"n\">mushroom</span><span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n    <span class=\"n\">ignore_conflicts</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>... is fearr ná:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">pepperoni</span><span class=\"p\">)</span>\n<span class=\"n\">your_pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">pepperoni</span><span class=\"p\">,</span> <span class=\"n\">mushroom</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>... áit a bhfuil caidreamh go leor ag Pizza` agus <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code>. Tabhair faoi deara go bhfuil roinnt de: meth: rabhadh don mhodh seo &lt;django.db.models.query.QuerySet.bulk_create&gt;, mar sin déan cinnte go bhfuil sé oiriúnach do do chás úsáide.</p>\n</section>\n<section id=\"remove-in-bulk\">\n<h3>Bain ar an mórchóir<a class=\"heading-anchor\" href=\"#remove-in-bulk\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Agus rudaí á bhaint as: class: ManyTomanyFields &lt;django.db.models.ManyToManyField&gt;, bain úsáid as: meth: ~Django.db.Models.Fields.Related.RelatedManager.Remove le rudaí iolracha chun líon na gceisteanna SQL a laghdú. Mar shampla:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_band</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">me</span><span class=\"p\">,</span> <span class=\"n\">my_friend</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>... is fearr ná:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_band</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">me</span><span class=\"p\">)</span>\n<span class=\"n\">my_band</span><span class=\"o\">.</span><span class=\"n\">members</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">my_friend</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>...where <code class=\"docutils literal notranslate\"><span class=\"pre\">Band</span></code> and <code class=\"docutils literal notranslate\"><span class=\"pre\">Artist</span></code> are models with a many-to-many relationship.</p>\n<p>When removing multiple many-to-many relationships involving several instances\nof the related models, use the <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#django.db.models.query.QuerySet.delete\" title=\"django.db.models.query.QuerySet.delete\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">delete()</span></code></a>\nmethod on a filtered queryset of the field's\n<a class=\"reference internal\" href=\"/ga/6.1/ref/models/fields/#django.db.models.ManyToManyField.through\" title=\"django.db.models.ManyToManyField.through\"><code class=\"xref py py-attr docutils literal notranslate\"><span class=\"pre\">through</span></code></a> model. By combining multiple\nconditions with <a class=\"reference internal\" href=\"/ga/6.1/ref/models/querysets/#q-objects\"><span class=\"std std-ref\">``Q () ``rudaí</span></a>, you can delete several relationships in a\nsingle query. For example:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.db.models</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">Q</span>\n\n<span class=\"n\">PizzaToppingRelationship</span> <span class=\"o\">=</span> <span class=\"n\">Pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">through</span>\n<span class=\"n\">PizzaToppingRelationship</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n    <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">=</span><span class=\"n\">my_pizza</span><span class=\"p\">,</span> <span class=\"n\">topping</span><span class=\"o\">=</span><span class=\"n\">pepperoni</span><span class=\"p\">)</span>\n    <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">=</span><span class=\"n\">your_pizza</span><span class=\"p\">,</span> <span class=\"n\">topping</span><span class=\"o\">=</span><span class=\"n\">pepperoni</span><span class=\"p\">)</span>\n    <span class=\"o\">|</span> <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">pizza</span><span class=\"o\">=</span><span class=\"n\">your_pizza</span><span class=\"p\">,</span> <span class=\"n\">topping</span><span class=\"o\">=</span><span class=\"n\">mushroom</span><span class=\"p\">)</span>\n<span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>... is fearr ná:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"n\">my_pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">pepperoni</span><span class=\"p\">)</span>\n<span class=\"n\">your_pizza</span><span class=\"o\">.</span><span class=\"n\">toppings</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">pepperoni</span><span class=\"p\">,</span> <span class=\"n\">mushroom</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>... áit a bhfuil caidreamh go leor ag Pizza` agus <code class=\"docutils literal notranslate\"><span class=\"pre\">Topping</span></code>.</p>\n</section>\n</section>","rootId":"database-access-optimization","toc":[{"title":"Próifíl ar dtús","anchor":"profile-first","children":[]},{"title":"Bain úsáid as teicnící caighdeánacha","anchor":"use-standard-db-optimization-techniques","children":[]},{"title":"Tuiscint a fháil ar QuerySets","anchor":"understand-querysets","children":[{"title":"Meastóireacht ``QuerySet ``a thuiscint","anchor":"understand-queryset-evaluation","children":[]},{"title":"Tréithe taiscéadta a thuiscint","anchor":"understand-cached-attributes","children":[]},{"title":"Úsáid an chlib teimpléad ``with`","anchor":"use-the-with-template-tag","children":[]},{"title":"Úsáid ``iterator () ``","anchor":"use-iterator","children":[]},{"title":"Úsáid ``mhínigh () ``","anchor":"use-explain","children":[]}]},{"title":"An oibríonn bunachar sonraí sa bhunachar sonraí seachas i Python","anchor":"do-database-work-in-the-database-rather-than-in-python","children":[{"title":"Úsáid Rawsql","anchor":"use-rawsql","children":[]},{"title":"Úsáid SQL amh","anchor":"use-raw-sql","children":[]}]},{"title":"Aisghabháil rudaí aonair ag úsáid colún uathúil, innéacsaithe","anchor":"retrieve-individual-objects-using-a-unique-indexed-column","children":[]},{"title":"Retrieve related objects efficiently","anchor":"retrieve-related-objects-efficiently","children":[{"title":"Use the FETCH_PEERS fetch mode","anchor":"use-the-fetch-peers-fetch-mode","children":[]},{"title":"Úsáid QuerySet.Select_related () ``agus ``prefetch_related ()","anchor":"use-queryset-select-related-and-prefetch-related","children":[]},{"title":"Use prefetch_related_objects()","anchor":"use-prefetch-related-objects","children":[]}]},{"title":"Ná aisghabháil rudaí nach dteastaíonn uait","anchor":"don-t-retrieve-things-you-don-t-need","children":[{"title":"Úsáid QuerySet.values () ``agus ``values_list ()","anchor":"use-queryset-values-and-values-list","children":[]},{"title":"Úsáid QuerySet.defer () ``agus ``only ()","anchor":"use-queryset-defer-and-only","children":[]},{"title":"Úsáid ``QuerySet.contents (obj) ``","anchor":"use-queryset-contains-obj","children":[]},{"title":"Úsáid ``QuerySet.count () ``","anchor":"use-queryset-count","children":[]},{"title":"Úsáid ``QuerySet.exists () ``","anchor":"use-queryset-exists","children":[]},{"title":"Ná ró-úsáid tá () ``, `count (), agus ann ()","anchor":"don-t-overuse-contains-count-and-exists","children":[]},{"title":"Úsáid QuerySet.Update () ``agus ``delete ()","anchor":"use-queryset-update-and-delete","children":[]},{"title":"Úsáid luachanna eachtracha go díreach","anchor":"use-foreign-key-values-directly","children":[]},{"title":"Ná ordaigh torthaí mura bhfuil cúram ort","anchor":"don-t-order-results-if-you-don-t-care","children":[]}]},{"title":"Úsáid modhanna mórchóir","anchor":"use-bulk-methods","children":[{"title":"Cruthaigh ar an mórchóir","anchor":"create-in-bulk","children":[]},{"title":"Nuashonrú i mórchóir","anchor":"update-in-bulk","children":[]},{"title":"Cuir isteach sa mórchóir","anchor":"insert-in-bulk","children":[]},{"title":"Bain ar an mórchóir","anchor":"remove-in-bulk","children":[]}]}],"breadcrumbs":[{"docname":"topics/index","title":"Using Django","url":"/ga/6.1/topics/"},{"docname":"topics/db/index","title":"Samhlacha agus bunachair sonraí","url":"/ga/6.1/topics/db/"}],"prev":{"docname":"topics/db/tablespaces","title":"Spásanna tábla","url":"/ga/6.1/topics/db/tablespaces/"},"next":{"docname":"topics/db/instrumentation","title":"Ionstraimíocht bunachar sonraí","url":"/ga/6.1/topics/db/instrumentation/"},"formats":{"html":"/ga/6.1/topics/db/optimization/","markdown":"/ga/6.1/topics/db/optimization.md","json":"/ga/6.1/topics/db/optimization.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/db/optimization.txt","official":"https://docs.djangoproject.com/ga/6.1/topics/db/optimization/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}