0

編集:コメントをありがとうございます。私はあなたの提案のほとんどを試しましたが、役に立ちませんでした. Connector/J 5.1.26 を使用して、Matlab でこのクエリを実行していることを付け加える必要があります (以前に言及しなかったことをお詫びします)。結局、クエリを「直接」実行すると0.2秒かかるため、これが実行時間の増加の原因だと思います。ただし、Connector/J を使用してこれほど大きなパフォーマンス ヒットに遭遇したことはありません。この新しい情報を踏まえて、何か提案はありますか? これを以前に開示しなかったことをお詫びしますが、Connector/J でパフォーマンスへの影響を経験したことはありません。


mySQL に次のテーブルがあります ( CREATEHeidiSQL から取得したコード):

CREATE TABLE `data` (
    `PRIMARY` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `ID` VARCHAR(5) NULL DEFAULT NULL,
    `DATE` DATE NULL DEFAULT NULL,
    `PRICE` DECIMAL(14,4) NULL DEFAULT NULL,
    `QUANT` INT(10) NULL DEFAULT NULL,
    `TIME` TIME NULL DEFAULT NULL,
    INDEX `DATE` (`DATE`),
    INDEX `ID` (`SYMBOL`),
    INDEX `PRICE` (`PRICE`),
    INDEX `QUANT` (`SIZE`),
    INDEX `TIME` (`TIME`),
    PRIMARY KEY (`PRIMARY`)
)

約 360,000 行のデータが取り込まれます。

次のクエリは、実行に 10 秒以上かかります。

Select ID, DATE, PRICE, QUANT, TIME FROM database.data WHERE DATE 
>= "2007-01-01" AND DATE <= "2010-12-31" ORDER BY ID, DATE, TIME ASC; 

数百万行のテーブルが他にもあり、同様のクエリを実行するとほんの一瞬で済みます。これが非常に遅い原因は何なのかわかりません。アイデア/ヒントはありますか?

説明:

id = 1
select_type = SIMPLE
table = data
type = ALL
possible_keys = DATE
key = (NULL)
key_len = (NULL)
ref = (NULL)
rows = 361161
Extra = Using where; Using filesort
4

3 に答える 3

0

私はmysqlに慣れていませんが、mssqlなので多分:

selectクエリのすべてのフィールドを完全にカバーするインデックスを提供するにはどうすればよいでしょうか。

はい、データが重複しますが、問題の議論の次のポイントに移ることができます。

于 2013-08-22T19:43:35.630 に答える