SELECT `id` , ( SELECT `id` FROM `rf_content` WHERE `channel` = `rf_kankan`.`id` AND `status` = 3 ORDER BY `publish_time` DESC LIMIT 1 ) AS `latest_content_id` FROM `rf_kankan` WHERE `id` IN (27, 29, 110, 113) ORDER BY ( SELECT `publish_time` FROM `rf_content` WHERE `channel` = `rf_kankan`.`id` AND `status` = 3 ORDER BY `publish_time` DESC LIMIT 1 ) DESC LIMIT 5 优化下
时间: 2023-07-13 20:06:38 浏览: 42
可以考虑使用子查询转为 JOIN 的方式优化这个 SQL,如下所示:
```
SELECT k.`id`, c.`id` AS `latest_content_id`
FROM `rf_kankan` k
LEFT JOIN (
SELECT `channel`, MAX(`publish_time`) AS `latest_publish_time`, MAX(`id`) AS `id`
FROM `rf_content`
WHERE `status` = 3
GROUP BY `channel`
) c ON k.`id` = c.`channel`
WHERE k.`id` IN (27, 29, 110, 113)
ORDER BY c.`latest_publish_time` DESC
LIMIT 5;
```
这个优化的思路是先使用子查询获取每个 `channel` 下最新的 `publish_time` 和对应的 `id`,然后使用 LEFT JOIN 将 `rf_kankan` 和 `rf_content` 表关联起来,得到每个 `channel` 对应的最新的 `id`。最后按照 `latest_publish_time` 排序,取前 5 条结果。
这个优化的好处是只需要查询一次 `rf_content` 表,减少了子查询的使用,可以提高查询效率。
相关问题
优化sql语句update jc_content set views_day=(select contentcou1_.views_day from jc_content_count contentcou1_ where jc_content.content_id=contentcou1_.content_id), comments_day=(select contentcou2_.comments_day from jc_content_count contentcou2_ where jc_content.content_id=contentcou2_.content_id), downloads_day=(select contentcou3_.downloads_day from jc_content_count contentcou3_ where jc_content.content_id=contentcou3_.content_id), ups_day=(select contentcou4_.ups_day from jc_content_count contentcou4_ where jc_content.content_id=contentcou4_.content_id)
可以将子查询改为连接查询,减少查询次数,提高效率:
```
UPDATE jc_content
INNER JOIN jc_content_count ON jc_content.content_id = jc_content_count.content_id
SET jc_content.views_day = jc_content_count.views_day,
jc_content.comments_day = jc_content_count.comments_day,
jc_content.downloads_day = jc_content_count.downloads_day,
jc_content.ups_day = jc_content_count.ups_day;
```
同时,可以对 `jc_content` 和 `jc_content_count` 表的 `content_id` 字段建立索引,加快连接查询的速度。
SELECT cbdl_code, CASE WHEN LENGTH(cbdl_code) = 1 THEN name WHEN LENGTH(cbdl_code) = 3 THEN CONCAT_WS('/', (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 1)), (SELECT name FROM pms_cbdl WHERE cbdl_code = t1.cbdl_code)) WHEN LENGTH(cbdl_code) = 4 THEN CONCAT_WS('/', (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 1)), (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 3)), (SELECT name FROM pms_cbdl WHERE cbdl_code = t1.cbdl_code)) WHEN LENGTH(cbdl_code) = 5 THEN CONCAT_WS('/', (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 1)), (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 3)), (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 4)), (SELECT name FROM pms_cbdl WHERE cbdl_code = t1.cbdl_code)) END AS new_name FROM pms_cbdl t1;以上语句执行报错
您好!根据您提供的SQL语句 SELECT cbdl_code, CASE WHEN LENGTH(cbdl_code) = 1 THEN name WHEN LENGTH(cbdl_code) = 3 THEN CONCAT_WS('/', (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 1)), (SELECT name FROM pms_cbdl WHERE cbdl_code = t1.cbdl_code)) WHEN LENGTH(cbdl_code) = 4 THEN CONCAT_WS('/', (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 1)), (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 3)), (SELECT name FROM pms_cbdl WHERE cbdl_code = t1.cbdl_code)) WHEN LENGTH(cbdl_code) = 5 THEN CONCAT_WS('/', (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 1)), (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 3)), (SELECT name FROM pms_cbdl WHERE cbdl_code = SUBSTRING(t1.cbdl_code, 1, 4)), (SELECT name FROM pms_cbdl WHERE cbdl_code = t1.cbdl_code)) END AS new_name FROM pms_cbdl t1; ,由于缺少表结构和完整的错误信息,无法准确判断报错原因。
请提供完整的错误信息,以及相关的表结构和数据,这样我才能更好地帮助您解决问题。谢谢!
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)