У меня есть индекс в столбцах a VARCHAR(255), b INT
в таблице InnoDB. Учитывая две пары a,b
, могу ли я использовать индекс MySQL для определения того, являются ли пары одинаковыми из программы c (т.е. Без использования strcmp
и численного сравнения)?
- Где индекс MySQL InnoDB, хранящийся в файловой системе?
- Можно ли его читать и использовать из отдельной программы? Каков формат?
- Как я могу использовать индекс для определения того, являются ли два ключа одинаковыми?
Примечание. Ответ на этот вопрос должен либо a) предоставить метод для доступа к индексу MySQL для выполнения этой задачи, либо b) объяснить, почему индекс MySQL практически невозможно получить или использовать таким образом. Ответ на конкретную платформу в порядке, и я на Red Hat 5.8.
Ниже приведена предыдущая версия этого вопроса, которая предоставляет больше контекста, но, похоже, отвлекает от актуального вопроса. Я понимаю, что есть другие способы выполнения этого примера в MySQL, и я предоставляю два. Это не вопрос оптимизации, а скорее разложение части сложности, которая существует во многих разных динамически сгенерированных запросах.
Я мог бы выполнить свой запрос, используя подзапрос с подгруппой, например
SELECT c, AVG(max_val)
FROM (
SELECT c, MAX(val) AS max_val
FROM table
GROUP BY a, b) AS t
GROUP BY c
Но я написал UDF, который позволяет мне делать это с помощью одного выбора, например.
SELECT b, MY_UDF(a, b, val)
FROM table
GROUP by c
Ключ здесь состоит в том, что я передаю поля a
и b
в UDF, и я вручную управляю a,b
подгруппами в каждой группе. Столбец a
является varchar, поэтому для этого требуется вызов strncmp
для проверки совпадений, но он достаточно быстро.
Однако у меня есть индекс my_key (a ASC, b ASC)
. Вместо того, чтобы вручную проверять совпадения на a и b, могу ли я просто получить доступ и использовать индекс MySQL? То есть, могу ли я получить значение индекса в my_key для данной строки или пары a,b
в c (внутри UDF)? И если да, гарантировано ли значение индекса уникальным для любого значения a,b
?
Я хотел бы вызвать MY_UDF(a, b, val)
, а затем посмотреть значение индекса mysql (a,b)
в c из UDF.