2017-03-17 50 views
1

我有一個稗2和snort運行。MySQL按緩慢排序

我想加入3個表,它在它自我工作正常。 它是通過cid命令選擇它減慢非常糟糕。 在這裏你可以看到兩個選擇和他們之間的時間。

運行而不爲了通過:

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) 

降序事件;

+-----------+------------------+------+-----+---------+-------+ 
| 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

請發佈一個解釋。乍看之下,我會說這是因爲event.cid是sid和主鍵的一部分,因此您的查詢不能使用該索引進行排序。 –

回答

1

看來你沒有索引event.cid。它主鍵的一部分,但如果它是第二個那個鍵,它可以用而不是來進行排序。 Ergo,你的訂單很慢。

如果你看看EXPLAIN,你可能會看到它。請做一個EXPLAIN,然後爲該列添加索引,然後再次檢查EXPLAIN。它可能會幫助:)

+0

我爲cid創建了一個索引,選擇時間爲0.84。謝謝! –

+0

不錯,很高興它的工作! – Nanne