Skip to content

MySQL: Explicit evaluation of JSON_CONTAINS() = 1 forces looping through all rows, bypassing index. #115

@HieuLeDuc

Description

@HieuLeDuc

Hello, i found a bug in a pretty niche use case.

MySQL provides Multi-Valued Indexes to speed up JSON_CONTAINS() search. However, when the condition JSON_CONTAINS(“...”) = 1 is evaluated, MySQL must execute the function for each row to determine the outcome before it can apply the =1 condition.
This basically bypass the index, and makes query slow to a crawl on big tables.

Removing the "=1" will causes Doctrine to fails to parse the query, throwing a very non descriptive error "Warning: Attempt to read property "type" on null". Took me quite awhile to trace the problem to this library.

Going forward, can you disable the check for "=1"? This is redundant, as simply call JSON_CONTAINS(“...”) will use the index as expected, while also only return rows when this is implicitly true.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions