2017-03-17 16 views
1

私は納屋2とsnortを実行しています。MySQL低速で注文する

私は3つのテーブルに参加しようとしていますが、それは自己でうまく動作します。 これは、Cidで選択すると本当に悪くなります。 ここでは、2つの選択とそれらの間の時間が表示されます。順に実行

mysql> SELECT event.sid, event.cid, event.timestamp, iphdr.ip_src, iphdr.ip_dst, 
     signature.sig_name 
     FROM event 
     INNER JOIN iphdr 
     ON event.cid=iphdr.cid 
     INNER JOIN signature 
     ON event.signature=signature.sig_id 
     WHERE sig_name like 'ICMP%' limit 10; 
<.....> 
10 rows in set (0.02 sec) 

によって順序なしで実行

mysql> SELECT event.sid, event.cid, event.timestamp, iphdr.ip_src, iphdr.ip_dst, 
      signature.sig_name 
     FROM event 
     INNER JOIN iphdr 
     ON event.cid=iphdr.cid 
     INNER JOIN signature 
     ON event.signature=signature.sig_id 
     WHERE sig_name like 'ICMP%' 
     order by event.cid desc limit 10; 
<.....> 
10 rows in set (6 min 1.52 sec) 

DESCイベント。

+-----------+------------------+------+-----+---------+-------+ 
| Field  | Type    | Null | Key | Default | Extra | 
+-----------+------------------+------+-----+---------+-------+ 
| sid  | int(10) unsigned | NO | PRI | NULL |  | 
| cid  | int(10) unsigned | NO | PRI | NULL |  | 
| signature | int(10) unsigned | NO | MUL | NULL |  | 
| timestamp | datetime   | NO | MUL | NULL |  | 
+-----------+------------------+------+-----+---------+-------+ 
4 rows in set (0.00 sec) 

desc signature;

+--------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+--------------+------------------+------+-----+---------+----------------+ 
| sig_id  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| sig_name  | varchar(255)  | NO | MUL | NULL |    | 
| sig_class_id | int(10) unsigned | NO | MUL | NULL |    | 
| sig_priority | int(10) unsigned | YES |  | NULL |    | 
| sig_rev  | int(10) unsigned | YES |  | NULL |    | 
| sig_sid  | int(10) unsigned | YES |  | NULL |    | 
| sig_gid  | int(10) unsigned | YES |  | NULL |    | 
+--------------+------------------+------+-----+---------+----------------+ 
7 rows in set (0.00 sec) 

desc iphdr;

+----------+----------------------+------+-----+---------+-------+ 
| Field | Type     | Null | Key | Default | Extra | 
+----------+----------------------+------+-----+---------+-------+ 
| sid  | int(10) unsigned  | NO | PRI | NULL |  | 
| cid  | int(10) unsigned  | NO | PRI | NULL |  | 
| ip_src | int(10) unsigned  | NO | MUL | NULL |  | 
| ip_dst | int(10) unsigned  | NO | MUL | NULL |  | 
| ip_ver | tinyint(3) unsigned | YES |  | NULL |  | 
| ip_hlen | tinyint(3) unsigned | YES |  | NULL |  | 
| ip_tos | tinyint(3) unsigned | YES |  | NULL |  | 
| ip_len | smallint(5) unsigned | YES |  | NULL |  | 
| ip_id | smallint(5) unsigned | YES |  | NULL |  | 
| ip_flags | tinyint(3) unsigned | YES |  | NULL |  | 
| ip_off | smallint(5) unsigned | YES |  | NULL |  | 
| ip_ttl | tinyint(3) unsigned | YES |  | NULL |  | 
| ip_proto | tinyint(3) unsigned | NO |  | NULL |  | 
| ip_csum | smallint(5) unsigned | YES |  | NULL |  | 
+----------+----------------------+------+-----+---------+-------+ 
14 rows in set (0.00 sec) 

私はMySQLで作業して以来、長い時間が経ちました。私のクエリはあまり良くありません。

+0

EXPLAINを投稿してください。一見すると、event.cidはsidと一緒にプライマリキーの一部であるため、クエリではそのインデックスをソートに使用できないためです。 –

答えて

1

event.cidにはインデックスがありません。 のプライマリキーですが、そのキーで2番目の場合はでなく、を使用して並べ替えることができます。エルゴ、注文は遅いです。

EXPLAINを見ると、おそらくそれを見ることができます。 EXPLAINを実行してから、その列の索引を追加して、EXPLAINを再度確認してください。おそらく助けになるでしょう:)

+0

私はcidのインデックスを作成し、選択時間は0.84になりました。ありがとうございました! –

+0

ニース、それはうれしかった! – Nanne

関連する問題