0

MySQL テーブルと比較したい 2 つの .csv ファイルをインポートしました。今、結合を使用して両方を比較したいと思います。

ただし、クエリに両方のテーブルを含めるたびに、phpMyAdmin から応答がありません (「最大実行時間を超えた」と表示されることがあります)。

両方の db テーブルのレコード サイズは最大 73k です。私はそれがデータ上で巨大だとは思わない。のような単純なクエリでも

SELECT *
FROM abc456, xyz456

ハングするようです。私は説明を行い、これを以下に示しました。これから何をとればいいのかわからない。

id  select_type     table   type    possible_keys   key     key_len     ref    rows     Extra
1   SIMPLE  abc456  ALL     NULL    NULL    NULL    NULL    73017   
1   SIMPLE  xyz456  ALL     NULL    NULL    NULL    NULL    73403   Using join buffer

誰か助けてくれませんか?

更新: 複合キーを持つテーブルの構造を追加しました。このテーブルには、約 100000 以上のレコードが挿入されます。

CREATE TABLE IF NOT EXISTS `abc456` (
`Col1` varchar(4) DEFAULT NULL,
`Col2` varchar(12) DEFAULT NULL,
`Col3` varchar(9) DEFAULT NULL,
`Col4` varchar(3) DEFAULT NULL,
`Col5` varchar(3) DEFAULT NULL,
`Col6` varchar(40) DEFAULT NULL,
`Col7` varchar(200) DEFAULT NULL,
`Col8` varchar(40) DEFAULT NULL,
`Col9` varchar(40) DEFAULT NULL,
`Col10` varchar(40) DEFAULT NULL,
`Col11` varchar(40) DEFAULT NULL,
`Col12` varchar(40) DEFAULT NULL,
`Col13` varchar(40) DEFAULT NULL,
`Col14` varchar(20) DEFAULT NULL,
KEY `Col1` (`Col1`,`Col2`,`Col3`,`Col4`,`Col5`,`Col6`,`Col7`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
4

3 に答える 3

3

クエリで純粋なカテジアン結合を行っているようです。

特定のフィールドでテーブルを結合するべきではありませんか? それでもクエリの実行に時間がかかる場合は、適切なインデックスを配置してクエリを高速化する必要があります。

時間がかかる理由は、最初のテーブルのすべての行を 2 番目のテーブルのすべての行に結合しようとしているためです。

于 2012-08-30T10:52:23.323 に答える
1

どの行を一致させる必要があるかを特定する何らかの方法で、結合条件が必要です。

SELECT * FROM abc456, xyz456 WHERE abc456.id = xyz456.id

于 2012-08-30T12:58:16.227 に答える
0
  1. 結合列にインデックスを追加します。それはパフォーマンスに役立つはずです。

  2. 長いクエリには、MySQL Workbench または MySQL Client (コンソール) を使用します。phpmyadmin は、10 万行を返すクエリを表示するようには設計されていません :)

  3. 本当に phpmyadmin を使用する必要があり、長いクエリを実行する必要がある場合は、phpmyadmin のタイムアウトを防ぐ Firefox 拡張機能を使用できます: phpMyAdmin Timeout Preventer (直接リンク!)

英語の説明が見つからなかったので、直接リンクがあります。

于 2012-10-23T06:23:19.147 に答える