2016-11-29 1 views
1

クエリ時間をどのように改善できますか?私はこれらの分野でのお金の取引を保存するためのテーブルを持っている:大きいテーブルでSELECTクエリを高速化する

id, customersId, paymentId, amount, cash, createDate 

私のクエリは、顧客の取引を取得します。

SELECT id,amount,cash,createDate 
FROM customers_transactions 
WHERE customersId = 2784 

このテーブルには、千万のレコード以上を持っています。クエリの実行には約13秒かかります。

の表は、これらのインデックスがあります

id, customersId (unique) 
customersId, createDate (unique) 

そして、これらのパーティション:

10 partiotions By RANGE on customersId 
LESS THAN 1000 
LESS THAN 2000 
LESS THAN 3000 
LESS THAN 4000 
LESS THAN 5000 
LESS THAN 6000 
LESS THAN 7000 
LESS THAN 8000 
LESS THAN 9000 
LESS THAN 10000 

サーバは8 GBのRAMを持っている、CORE i5の3.2GHzの

で、私はこのクエリを実行したいです0.5秒未満

+0

クエリのEXPLAINを実行しましたか?テーブルでOPTIMIZEを使用しましたか?クエリは非常に簡単なので、関連するインデックスをかなり簡単に取得して使用することが期待されます。 – Kickstart

+0

'customersId'のみのインデックスを試してみてください。または、 'id、customersId'インデックスで列の順序を逆にします。 SQLインプリメンテーションでは、複合インデックスの「サブインデックス」(この場合は「customersId」)に精通していますが、それ自体では利用されません。 'customersId = 2784'のように。そのインデックスの第1列を参照すると、インデックスが明確に利用されました。 – radarbob

+0

MySQLでは、この場合インデックスの最初の部分を使うべきです。 http://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html – Kickstart

答えて

0

他に必要な場合を除き、パーティションから削除してください。

索引索引(索引にはすべての必要な列が含まれています)を作成できますが、それは過剰です。また

から
メイクIDを主キーとid, customersId (unique)

P.S.を投げます
なぜあなたはcreateDatecustomersId, createDate (unique)でしたか?

+0

テーブルにプライマリキーがある場合、partiotionsキーはプライマリキーでなければなりません。 idをプライマリにすると、customersIdによって私のテーブルをpartiotioningできなくなります。 createDate index結果の範囲をより狭い範囲にします。このインデックスによって私のクエリは3秒で、これは13秒ではありません。 –

+1

したがって、 'あなたが何か別のものを必要としない限り、パーティションから取り除きます。 –

関連する問題