私はLinux上でMariDB 10.1.18を使用しています。グループBy MariaDB very slow
私は次のような構造で簡単なテーブル(t)を持っている:私は主キーが自動的にインデックスされますと仮定し
| id | a | b | c |
-------------------
| 1 | 3 | 7 | 10 |
| 2 | 4 | 6 | 9 |
| 3 | 2 | 7 | 11 |
| 4 | 3 | 5 | 10 |
| 5 | 4 | 8 | 12 |
| 6 | 2 | 9 | 6 |
id is primary key
a - has BTREE index
b - has HASH index
c - has HASH index
。 私のクエリは単純です:パフォーマンスの目的のために
SELECT * FROM t GROUP BY a
使用されるエンジンはMEMORY
です。
500万行では、上記のクエリではが1秒で完了し、は1つのCPUのスレッドを100%利用します。現在、列Aには約150の一意の値があります。
ルーズインデックス検索を使用すると、これが解決できると想定しました。残念ながら、これは決して使用されないため、MariaDBでは動作しないようです。 loosescanはオンに設定されています。
私は私のデータベースに1.1秒かかり
SELECT MAX(a) FROM t GROUP BY a
を試してみました。
質問:私はこれをすばやくすばやくすることができますか? 0.05秒と同じように。
ありがとうございました!
Plsは説明の結果を投稿します – Shadow
注意点:標準的な開発技術で達成できることはごくわずかです。より高いパフォーマンスを得るためにMySQLインスタンスを設定するようDBAに依頼する必要があるかもしれません。 – Shadow
目的は、特定の行をフィルターに掛けて、aでグループ化された最も高いcを持つ行を戻すことです。例:* DESCによってソートされたIN *(5,6,7)AND IN(2,3)GROUPを選択します。ただし、これにより適切な結果が得られないため、結合が必要です。しかし、私はそれには入りません。 – SilviuT