If you have no scope to change the query in the application your
options are limited to:
1) Use a materialized view rather than a regular view (static table
that contains the output of a view, maintained by triggers)
2) Query rewrite in a proxy you put in front of MariaDB. MySQL has a
query-rewrite plugin, but MariaDB does not hence why you would have to
put a proxy in front of it. Both ProxySQL and MaxScale have a feature
for query-rewriting.

On Tue, 6 May 2025 at 17:19, Pantelis Theodosiou <yperc...@gmail.com> wrote:
>
> Why not two separate queries then,
> and modify the application code to combine the results?
>
> SELECT * FROM table WHERE p1 = 'p1' ;
> SELECT * FROM table WHERE p2 = 'p2' ;
>
>
> On Tue, May 6, 2025 at 3:14 PM Jaco Kroon via discuss 
> <discuss@lists.mariadb.org> wrote:
>>
>> Hi,
>>
>> On 2025/05/06 16:07, Gordan Bobic wrote:
>> > Is there an overwhelming reason why can you not instead search for:
>> >
>> > SELECT * FROM view_name WHERE p1 = 'p1' and p2 = 'p2'?
>>
>> The application in use configures a table name only, and assumes a
>> single id column with a string value against which to match.
>>
>> Fixing that is going to be extremely complex (read: I don't see a way of
>> achieving that, even with access to the code, was my first thought).
>>
>> Kind regards,
>> Jaco
>>
>> >
>> > On Tue, 6 May 2025 at 16:58, Jaco Kroon via discuss
>> > <discuss@lists.mariadb.org> wrote:
>> >> Hi All,
>> >>
>> >> So I'm stuck with an application that does something like (can't
>> >> trivially modify the code):
>> >>
>> >> Prepare SELECT * FROM view_name WHERE id = ?
>> >> Execute SELECT * FROM view_name WHERE id = 'p1-p2'
>> >>
>> >> The problem is that id is a compound between two individual indexes from
>> >> the underlying tables, eg:
>> >>
>> >> CREATE VIEW AS SELECT CONCAT(k1, '-', k2) id, other, fields FROM table1,
>> >> table2;
>> >>
>> >> Yes, the full join is on purpose, table2 will only ever have a handful
>> >> (three currently) rows in it.
>> >>
>> >> table1 however can get "big" (only a few hundred rows, and will likely
>> >> mostly be in the buffer pool on all hosts, so most likely not the worst
>> >> possible situation).
>> >>
>> >> Is there perhaps a mechanism to get mariadb to "break down" the searched
>> >> for id value to enable it hitting the underlying indexes more properly?
>> >>
>> >> If not this is going to be a "let's see how far it stretches" kind of
>> >> scenario for the time being, or possibly see if the mariadb query cache
>> >> can help.  In which case, is it possible to selectively enable the query
>> >> cache on a per query basis, because as a rule we found that the query
>> >> cache actually degraded performance (I believe due to lock contention).
>> >>
>> >> The only other option I can imagine is to create a separate table that
>> >> regenerates whenever data in the source tables changes (by way of 
>> >> triggers).
>> >>
>> >> Kind regards,
>> >> Jaco
>> >>
>> >> _______________________________________________
>> >> discuss mailing list -- discuss@lists.mariadb.org
>> >> To unsubscribe send an email to discuss-le...@lists.mariadb.org
>> >
>> >
>> _______________________________________________
>> discuss mailing list -- discuss@lists.mariadb.org
>> To unsubscribe send an email to discuss-le...@lists.mariadb.org



-- 
Gordan Bobic
Database Specialist, Shattered Silicon Ltd.
https://shatteredsilicon.net
_______________________________________________
discuss mailing list -- discuss@lists.mariadb.org
To unsubscribe send an email to discuss-le...@lists.mariadb.org

Reply via email to