Thanks Caleb for bringing it up.

When I opened this issue, I originally wanted to propose the following
syntax:
1、When we want to force the selection of certain indexes:
SELECT ...USE INDEX (ks.idx1, ks.idx2....)  ... FROM ...WHERE ...
 or
SELECT .../*+ USE INDEX (ks.idx1, ks.idx2....)*/  ... FROM ...WHERE ...

2、When we want to ignore the selection of some indexes:
SELECT ...IGNORE INDEX (ks.idx1, ks.idx2....)  ... FROM ...  WHERE ...
or
SELECT .../*+ IGNORE INDEX (ks.idx1, ks.idx2....) */ ... FROM ...  WHERE
...

And In fact, what I originally wanted to do was to provide a hint function
<https://dev.mysql.com/doc/refman/8.0/en/optimizer-hints.html#optimizer-hints-overview>
similar to MySQL, which can push down some rules  dynamically.
The work to provide a hint for DDL needs to be accomplished in many steps,
CASSANDRA-18112 for index hint is part of it, maybe the first step.


Ekaterina Dimitrova <e.dimitr...@gmail.com> 于2024年12月21日周六 22:27写道:

> Naming is hard but to me providing what Caleb mentioned through something
> like WITH OPTIONS sounds reasonable. Thanks for bringing it up.
>
> On Sat, 21 Dec 2024 at 2:46, Joel Shepherd <sheph...@amazon.com> wrote:
>
>> WITH INDEX (or something equivalent) seems really useful.
>>
>> Less opinionated on the specific syntax, but I think there is a lot of
>> value in the form of predictable, controllable performance, in giving
>> developers more direct control over query execution, whether that's
>> index selection or even lower-level decisions. If you've experienced the
>> thrill of operating a database with a cost-based planner that abruptly
>> selects a new, sub-optimal plan due to a change in statistics or
>> configuration, you'll appreciate language features that yield some
>> planning control back to you. It does increase the burden on the
>> developer to understand how best to execute the query, but it makes
>> their intent much more obvious, and easier to adjust as the system
>> changes.
>>
>> -- Joel.
>>
>> On 12/20/2024 12:28 PM, Caleb Rackliffe wrote:
>> > Some of your are probably familiar with work in the DS fork to improve
>> > the selection of indexes for SAI queries in
>> >
>> https://github.com/datastax/cassandra/commit/eeb33dd62b9b74ecf818a263fd73dbe6714b0df0#diff-2830028723b7f4af5ec7450fae2c206aeefa5a2c3455eff6f4a0734a85cb5424.
>>
>> >
>> >
>> > While I'm eagerly anticipating working on that in the new year, I'm
>> > also wondering whether we think some simple CQL extensions to manually
>> > control index selection would be helpful. Maxwell proposed this a
>> > while back in CASSANDRA-18112, and I'd like to propose a syntax:
>> >
>> >
>> > ex. Do not use the specified index during the query.
>> >
>> > SELECT ... FROM ... WHERE ... WITHOUT INDEX <ks.idx>
>> >
>> > This could be helpful for intersection queries where one of the
>> > provided clauses is not very selective and could simply be handled via
>> > post-filtering.
>> >
>> > ex. Require the specified index to be used.
>> >
>> > SELECT ... FROM ... WHERE ... WITH INDEX <ks.idx>
>> >
>> > This could be helpful in scenarios where multiple indexes exist on a
>> > column and was the primary motivation for CASSANDRA-18112.
>> >
>> > Thoughts?
>>
>

Reply via email to