我的托管公司最近从慢查询日志中给了我这个条目。检查的行似乎过多,可能有助于降低服务器的速度。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 整数 (6)
- 姓氏 varchar (30)
- travelerName varchar (40) (99.9% = '全部')
- depTime 日期时间
- fltNum varchar (6)
- depCity varchar (4)
- 总共 23 个字段(包括一个 blob,包含 25K 图像)
编辑:
ADD INDEX deleteQuery (empNum, lastName, travelerName, depTime, fltNum, depCity, Num)
这是创建索引的问题吗?如果是这样,什么类型和什么字段?
最后 3 个条件通过询问是否完成以及在时间段内来限制行数。他们能否在查询中(更早)更好地定位?第5个AND ...
有必要吗?
对所有想法开放。感谢您的关注。