我a VARCHAR(255), b INT
在 InnoDB 表中的列上有一个索引。给定两a,b
对,我可以使用 MySQL 索引来确定来自 ac 程序的对是否相同(即不使用 astrcmp
和数值比较)?
- 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
这里的关键是我将字段传递给 UDF,并且我手动管理a
每个组中的子组。Column是一个 varchar,所以这涉及到检查匹配的调用,但它相当快。b
a,b
a
strncmp
但是,我有一个 index my_key (a ASC, b ASC)
。我可以访问和使用 MySQL 索引,而不是手动检查 a 和 b 上的匹配项吗?也就是说,我可以在 my_key 中获取给定行或a,b
c 中的对(在 UDF 内)的索引值吗?如果是这样,是否可以保证索引值对于任何值都是唯一的a,b
?
我想调用MY_UDF(a, b, val)
然后(a,b)
从 UDF 中查找 c 中的 mysql 索引值。