下面的查询即使没有order by
也非常慢,我不明白为什么。我猜是where date_affidavit_file
的问题,但是我怎样才能用这个order by
来加快速度呢?也许作业id上的一个子包与where匹配,然后将其传递到代码的其余部分,但我仍然需要按服务器订购这样的服务器名。有什么建议吗?
explain select sql_no_cache court_county, job.id as jid, job_status,
DATE_FORMAT(job.datetime_served, '%m/%d/%Y') as dserved ,
CONCAT(server.namefirst, ' ', server.namelast) as servername, client_name,
DATE_FORMAT(job.datetime_received, '%m/%d/%Y') as dtrec ,
DATE_FORMAT(job.datetime_give2server, '%m/%d/%Y') as dtg2s,
DATE_FORMAT(date_kase_filed, '%m/%d/%Y') as dkf,
DATE_FORMAT(job.date_sent_to_court, '%m/%d/%Y') as dtstc ,
TO_DAYS(datetime_served )-TO_DAYS(date_kase_filed) as totaldays from job
left join kase on kase.id=job.kase_id
left join server on job.server_id=server.id
left join client on kase.client_id=client.id
left join LUcourt on LUcourt.id=kase.court_id
where date_affidavit_filed is not null and date_affidavit_filed !='' order by servername;
+----+-------------+---------+--------+----------------------+---------+---------+-----------------------+--------+----------------------------------------------+
|id |选择|类型|表格|类型|可能的|键|键|长度|参考|行|额外|
+----+-------------+---------+--------+----------------------+---------+---------+-----------------------+--------+----------------------------------------------+
|1 |简单|工作|全部|日期|宣誓书|空|空| 365212 |使用位置;使用临时;使用文件排序|
|1 |简单|基本|基本| 4 |服务工作|基本| 1 ||
|1 |简单|服务器| eq|ref |主|主| 4 | pserve.job.server | id | 1 ||
|1 |简单|客户| eq |参考|主要|主要| 4 |服务客户| id | 1 ||
|1 |简单| LUcourt | eq|ref |主要|主要| 4 | pserve.kase.court | id | 1 ||
+----+-------------+---------+--------+----------------------+---------+---------+-----------------------+--------+----------------------------------------------+
最佳答案
检查以下列是否有索引。job.kase_id
或job.server_id
另外,您是按一个计算字段排序的,该字段不是最优的。可能是按带索引的字段排序。
如果需要保留该精确排序,则可能需要在数据库中为该值添加一个字段。并用适当的值填充它,或者在数据库上设置一个触发器来自动填充它。