[gdal-dev] Ogr: Difference betwen SQLexectue() and SetAttributFilter() ?
Even Rouault
even.rouault at mines-paris.org
Mon Jul 23 03:11:26 PDT 2012
Le lundi 23 juillet 2012 11:19:48, Benjamin a écrit :
> Hi,
>
> There is a difference betwen :
>
> layer = ds.ExecuteSQL("SELECT * FROM MY_TABLE WHERE ID='my_id'", null, "");
>
> And
>
> layer = ds.GetLayerByName("MY_TABLE");
> layer.SetAttributeFilter("ID='my_id'");
>
> ?
Short answer:
Generally, there should not be a visible difference between both syntax. There
might be very subtle performance differences due to internal implementation
details, but I doubt you could notice them. So use the one that is the most
convenient for you.
Long answer :
For drivers that are not based on relational database manager, such as
Shapefile, in both cases, the filter will be evaluated on "client-side" (there
is no server side ;-))
For drivers such as PG, MySQL, SQLite, etc, the ExecuteSQL() is directly
transfered to the database engine. But the SetAttributeFilter() is also used
to synthetize a "SELECT * FROM the_table WHERE the_attribute_filter"
internally, that is transfered to the database engine, so the performance will
also be good.
More information about the gdal-dev
mailing list