私は、約650行、5 MBのデータ長、60 KBのインデックス長のMEMORYテーブルを持っています(かなり小さいので)。 1つのSMALLINTプライマリ(ハッシュ)キーと約90の他の列(int、varchars、datetimes、blobsまたはtexts)がありません。 (EDIT:BIGINT列のハッシュキーもあります。)単純な定数は、小さなMEMORYテーブルの主キーを非常に遅く選択します。
私は(PHP)からこのクエリを実行しているかなり頻繁に(約10倍の毎秒):
選択*どこID userekから= {CONST_ID}とkitiltva = 0と kitiltva_meddig < "{CONST_DATETIME}" とinaktiv = 0
注:id
が主キーです。私は*
が必要です。なぜなら、結果は多くの異なる場所で使用され、基本的にはすべての列がここやそこで使用されるからです。
私の問題です:定期的にクエリが異常に遅くなる。平均して0.5s
については、8s
maxです。たいていの場合、それは非常に高速です:75%
の実行は、平均よりも速い3ms
より速く実行されます。85%
しかし15%
平均よりも遅い13%
は1s
よりも遅いです。だから、長い尾があります。
そして私はそれが何を引き起こすのか全く分かりません。誰の考え?
PK以外のテーブルのインデックスはありません。 –
ああ、BIGINT列に別のハッシュインデックスがあります。それでおしまい。 – Cucu
'(id、kitiltva、inaktiv、kitiltva_meddig)のBTREEインデックスがこのクエリに最も適しています。しかし、私はMEMORYテーブルを扱っていないので、この場合は(索引を追加する)ことが適切であれば、より多くの経験を持つ人に助言を与えることができます。 –