我有一个barnyard2并且正在运行。
我试图加入3个表,其中自我运作正常。 在通过cid订购select时,它的速度非常慢。 在这里,您可以看到两个选择以及它们之间的时间。
按顺序运行:
StackPanel
按订单运行:
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)
desc事件;
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 iphdr;
+--------------+------------------+------+-----+---------+----------------+
| 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)
自从我在MySQL工作以来已经很长时间了,所以我的查询并不是那么好。
答案 0 :(得分:1)
您似乎没有event.cid
的索引。 是主键的一部分,但如果它是该键中的第二个,则不可用于排序。你的订单很慢。
如果你看一下EXPLAIN,你可能会看到它。请执行EXPLAIN,然后为该列添加索引,并再次检查EXPLAIN。它可能会有所帮助:)