现在,我正在努力弄清楚,我应该做什么,以改善我的查询结果。现在是47.55。

那么,我应该为列创建任何索引吗?请告诉我
SELECT bw.workloadId, lrer.lecturerId, lrer.lastname, lrer.name, lrer.fathername, bt.title, ac.activityname, cast(bw.exactday as char(45)) as "date", bw.exacttime as "time" FROM base_workload as bw
right join unioncourse as uc on uc.idunioncourse = bw.idunioncourse
right join basecoursea as bc on bc.idbasecoursea = uc.idbasecourse
right join lecturer as lrer on lrer.lecturerId = uc.lecturerId
right join basetitle as bt on bt.idbasetitle = bc.idbasetitle
right join activity as ac on ac.activityId = bc.activityId
where lrer.lecturerId is not null AND bc.idbasecoursea is not null and bw.idunioncourse != ""
ORDER BY bw.exactday, bw.exacttime ASC;发布于 2022-04-29 22:00:37
来自MySQL 8.0文档:
索引用于快速查找具有特定列值的行。在没有索引的情况下,MySQL必须从第一行开始,然后遍历整个表以找到相关的行。桌子越大,成本就越高。如果表中的列有索引,MySQL可以快速确定要在数据文件中间查找的位置,而不必查看所有数据。这比按顺序读取每一行要快得多。
MySQL使用这些操作的索引:
WHERE子句匹配的行,请执行以下操作。MIN()或MAX()值,请执行以下操作。ORDER BY key_part1, key_part2)上进行的,则对表进行排序或分组。根据您的要求,您可以在WHERE子句上使用索引来更快地检索数据。
发布于 2022-04-30 00:22:55
我想你可以摆脱
lrer.lecturerId is not null
AND bc.idbasecoursea is not null通过将前3 RIGHT JOINs更改为JOINs。
exactday的数据类型是什么?目的是什么
cast(bw.exactday as char(45)) as "date"CAST可能是不必要的。
Re bw.exactday,bw.exacttime:通常最好是为DATETIME使用一列而不是两列(日期和时间)。
表的PRIMARY KEYs是什么?
如果可能的话,请转换为LEFT JOIN;我不能把我的头绕在RIGHT JOINs上。
bw上的这个索引可能会有所帮助:INDEX(exactday, exacttime)。
https://stackoverflow.com/questions/72063767
复制相似问题