a VARCHAR(255), b INT
InnoDBテーブルの列にインデックスがあります。2つa,b
のペアがある場合、MySQLインデックスを使用して、ペアがacプログラムから同じであるかどうかを判断できますか(つまりstrcmp
、数値比較を使用せずに)?
- MySQL InnoDBインデックスはファイルシステムのどこに保存されていますか?
- 別のプログラムから読み取って使用できますか?フォーマットは何ですか?
- インデックスを使用して、2つのキーが同じであるかどうかを判断するにはどうすればよいですか?
注:この質問への回答は、a)このタスクを実行するためにMySQLインデックスにアクセスする方法を提供するか、b)この方法でMySQLインデックスに実際にアクセス/使用できない理由を説明する必要があります。プラットフォーム固有の答えは問題ありません。私はRedHat5.8を使用しています。
以下は、この質問の以前のバージョンです。これは、より多くのコンテキストを提供しますが、実際の質問から注意をそらすようです。MySQL内でこの例を実行する方法は他にもあることを理解しており、2つ提供します。これは最適化に関する質問ではなく、動的に生成される多くの異なるクエリに存在する複雑さの一部を除外することです。
サブグループ化されたサブセレクトを使用してクエリを実行できます。
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
とUDFを渡し、各グループのサブグループb
を手動で管理することです。a,b
Columna
はvarcharであるため、これにはstrncmp
一致をチェックするための呼び出しが含まれますが、かなり高速です。
しかし、私はインデックスを持っていますmy_key (a ASC, b ASC)
。aとbの一致を手動でチェックする代わりに、MySQLインデックスにアクセスして使用できますか?つまりa,b
、c(UDF内)の特定の行またはペアのmy_keyのインデックス値を取得できますか?もしそうなら、インデックス値はどの値に対しても一意であることが保証されますa,b
か?
呼び出して、UDFからcMY_UDF(a, b, val)
のmysqlインデックス値を検索したいと思います。(a,b)