下面的查询即使没有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_idjob.server_id
另外,您是按一个计算字段排序的,该字段不是最优的。可能是按带索引的字段排序。
如果需要保留该精确排序,则可能需要在数据库中为该值添加一个字段。并用适当的值填充它,或者在数据库上设置一个触发器来自动填充它。

09-30 14:38
查看更多