<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Lato;
        panose-1:2 15 5 2 2 2 4 3 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:10.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="en-FR" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="FR" style="font-size:11.0pt;mso-fareast-language:EN-US">Thanks Regis.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="FR" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US">I tried with an existing project, and with no project. The information of the layers is:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Lato",sans-serif;color:black">service='</span><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">mycomp_prod</span><span style="font-family:"Lato",sans-serif;color:black">' sslmode=require key='gid'
 estimatedmetadata=true srid=27572 type=Point checkPrimaryKeyUnicity='1' table="public"."</span><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">mylayer</span><span style="font-family:"Lato",sans-serif;color:black">"<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Lato",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">with service in `.pg_service.conf` :<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">[mycomp_prod]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">user=rd<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">sslmode=require<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">host=gis.mycomp.fr<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">port=5432<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">dbname=mycomp<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-family:"Lato",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">(don’t blame me for the 27572 OK
</span><span lang="EN-US" style="font-family:"Apple Color Emoji";color:black">😅</span><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">I think I’ll open an issue because it _<i>seems</i>_ to do a SELECT count(*) FROM mylayer + SELECT * FROM mylayer until all features have been fetched. In my example,
 I have a 11M Points layer so it takes a while </span><span lang="EN-US" style="font-family:"Apple Color Emoji";color:black">😊</span><span lang="EN-US" style="font-family:"Lato",sans-serif;color:black">.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt;mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">Régis Haubourg <regis.haubourg@gmail.com><br>
<b>Date: </b>Saturday, 25 June 2022 at 12:54<br>
<b>To: </b>Rémi Desgrange <remi.desgrange@ielo.net><br>
<b>Cc: </b>QGIS Developers List <qgis-developer@lists.osgeo.org><br>
<b>Subject: </b>Re: [QGIS-Developer] Feature count for DB provider.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">Hi Rémy, There had been a lot of work for postGIS and oracle providers. A count(*) might be really expensive for big tables, so there are options to use db statistics instead of real count. I bet the loop
 you point out occurs only in fallback situations but is not the main case.<o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">One is here for instance by there are numerous PRs like this one
<a href="https://github.com/qgis/QGIS/pull/37619">https://github.com/qgis/QGIS/pull/37619</a><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">In think @troopa81 has a clear view of the current state.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">all the best<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">Régis <o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<div>
<div>
<p class="MsoNormal"><span style="font-size:11.0pt">Le sam. 25 juin 2022 à 10:38, Rémi Desgrange via QGIS-Developer <<a href="mailto:qgis-developer@lists.osgeo.org" target="_blank">qgis-developer@lists.osgeo.org</a>> a écrit :<o:p></o:p></span></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="FR" style="font-size:11.0pt">Hi,</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="FR" style="font-size:11.0pt"> </span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt">Just launched the new QGIS 3.24, and tests the SQL debugger, I just found out that the “feature count” does a while loop on all features
 in the layer to count.</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt"> </span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt">While it’s probably necessary for shapefiles or stuff like that, it appears suboptimal for databases access. I found this part in the
 code that looks like to be responsible for the feature counts, <a href="https://github.com/qgis/QGIS/blob/master/src/core/vector/qgsvectorlayerfeaturecounter.cpp#L76-L90" target="_blank">
https://github.com/qgis/QGIS/blob/master/src/core/vector/qgsvectorlayerfeaturecounter.cpp#L76-L90</a>
</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt"> </span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt">Do you think I could make a special case for database-based provider (geopackage, postgres/oracle/mysql/etc…) that launch a “SELECT count(*)
 FROM table” instead of looping on all features.</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt"> </span><span style="font-size:11.0pt"><o:p></o:p></span></p>
<p class="MsoNormal" style="mso-margin-top-alt:auto;mso-margin-bottom-alt:auto"><span lang="EN-US" style="font-size:11.0pt">Thanks.
</span><span style="font-size:11.0pt"><o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="font-size:11.0pt">_______________________________________________<br>
QGIS-Developer mailing list<br>
<a href="mailto:QGIS-Developer@lists.osgeo.org" target="_blank">QGIS-Developer@lists.osgeo.org</a><br>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">
https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">
https://lists.osgeo.org/mailman/listinfo/qgis-developer</a><o:p></o:p></span></p>
</blockquote>
</div>
</div>
</body>
</html>