【发布时间】:2013-04-01 16:47:34
【问题描述】:
我的托管公司最近从慢查询日志中给了我这个条目。检查的行似乎过多,可能有助于降低服务器的速度。 phpMyAdmin 中的测试导致持续时间为 0.9468 秒。
Check_in 表通常包含 10,000 到 17,000 行。它还有一个索引:Num, unique = yes, cardinality = 10852, collation = A.
我想改进这个查询。 WHERE 后面的前五个条件包含要检查以排除重复项的字段。
# User@Host: fxxxxx_member[fxxxxx_member] @ localhost []
# Query_time: 5 Lock_time: 0 Rows_sent: 0 Rows_examined: 701321
use fxxxxx_flifo;
SET timestamp=1364277847;
DELETE FROM Check_in USING Check_in,
Check_in as vtable WHERE
( Check_in.empNum = vtable.empNum )
AND ( Check_in.depCity = vtable.depCity )
AND ( Check_in.travelerName = vtable.travelerName )
AND ( Check_in.depTime = vtable.depTime )
AND ( Check_in.fltNum = vtable.fltNum )
AND ( Check_in.Num > vtable.Num )
AND ( Check_in.accomp = 'NO' )
AND Check_in.depTime >= TIMESTAMPADD ( MINUTE, 3, NOW() )
AND Check_in.depTime < TIMESTAMPADD ( HOUR, 26, NOW() );
编辑:
- empNum int (6)
- 姓氏 varchar (30)
- travelerName varchar (40) (99.9% = 'All')
- depTime 日期时间
- fltNum varchar (6)
- depCity varchar (4)
- 总共 23 个字段(包括一个 blob,包含 25K 图像)
编辑:
ADD INDEX deleteQuery (empNum, lastName, travelerName, depTime, fltNum, depCity, Num)
这是创建索引的问题吗?如果有,是什么类型,什么字段?
最后 3 个条件通过询问是否完成以及在时间段内来限制行数。他们能否在查询中(更早)更好地定位?第5个AND ...有必要吗?
接受所有想法。感谢观看。
【问题讨论】:
-
我建议您检查执行计划:
explain select ...(而不是删除)。在那里你可以检查你可能需要索引的字段。 -
@Barranka 你能解释一下吗?我还不了解索引。你是建议
explain select * from Check_in还是explain Num, empNum, depCity ...?
标签: mysql database query-optimization