多表查询,速度太慢

科尼塞克幽灵 2018-03-21 07:09:22
SELECT
`ac`.`user_name` AS `user_name`,
`ac`.`user_account` AS `user_account`,
`ac`.`user_type` AS `user_type`,
`ac`.`detail_addr` AS `detail_addr`,
`bl`.`create_name` AS `create_name`,
`bl`.`create_date` AS `create_date`,
`bl`.`bill_code` AS `bill_code`,
`bl`.`this_m` AS `this_m`,
`bl`.`balance_m` AS `balance_m`,
`bl`.`bill_type` AS `bill_type`,
`od`.`step1_num` AS `step1_num`,
`od`.`step2_num` AS `step2_num`,
`od`.`step3_num` AS `step3_num`,
`od`.`step_price` AS `step_price`,
`bl`.`sys_company_code` AS `sys_company_code`
FROM
(
(
bl
LEFT JOIN od ON (
(
`bl`.`order_code` = `od`.`order_code` and `bl`.bill_type != '200'
)
)
)
JOIN ac ON (
(
`bl`.`user_account` = `ac`.`user_account` and `bl`.bill_type != '200'
)
)
)
ORDER BY
`bl`.`id` DESC

有三个表 ac 、bl、od

这样查询太慢了,不知有什么方法可以提高显示速度
...全文
2393 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42521411 2018-06-25
  • 打赏
  • 举报
回复
没有过滤条件吧
xiaoxiangqing 2018-05-21
  • 打赏
  • 举报
回复
要看下执行计划。看慢在哪里?
zestsnake 2018-05-20
  • 打赏
  • 举报
回复
有多慢? 索引建立了吗?
shoppo0505 2018-05-03
  • 打赏
  • 举报
回复
都是!=表达式惹的祸。 使用!=就不会使用index了。
xiaoxiangqing 2018-05-03
  • 打赏
  • 举报
回复
你要看下执行计划
zestsnake 2018-05-02
  • 打赏
  • 举报
回复
是不是没有过滤条件?
rings2000 2018-04-10
  • 打赏
  • 举报
回复
必须先处理好索引
a2048 2018-03-26
  • 打赏
  • 举报
回复
关键看那几个表数据多少,还有索引是否有。
吉普赛的歌 版主 2018-03-21
  • 打赏
  • 举报
回复
你的SQL太乱, 帮你整理了一下:
SELECT `ac`.`user_name`         AS `user_name`,
       `ac`.`user_account`      AS `user_account`,
       `ac`.`user_type`         AS `user_type`,
       `ac`.`detail_addr`       AS `detail_addr`,
       `bl`.`create_name`       AS `create_name`,
       `bl`.`create_date`       AS `create_date`,
       `bl`.`bill_code`         AS `bill_code`,
       `bl`.`this_m`            AS `this_m`,
       `bl`.`balance_m`         AS `balance_m`,
       `bl`.`bill_type`         AS `bill_type`,
       `od`.`step1_num`         AS `step1_num`,
       `od`.`step2_num`         AS `step2_num`,
       `od`.`step3_num`         AS `step3_num`,
       `od`.`step_price`        AS `step_price`,
       `bl`.`sys_company_code`  AS `sys_company_code`
FROM   bl
       LEFT JOIN od
            ON  `bl`.`order_code` = `od`.`order_code`
            AND `bl`.bill_type != '200'
       JOIN ac
            ON  `bl`.`user_account` = `ac`.`user_account`
            AND `bl`.bill_type != '200'
ORDER BY
       `bl`.`id` DESC
一般来说, != 不符合SARG标准, 容易导致表扫描。 另外: 1. 你这3个表各有多少数据? 2. 最终的结果有多当数据? 3. 每个表上的索引的情况是怎么样的?
show index from bl;
show index from od;
show index from ac;
只看你的SQL, 基本上没有过滤, 你要一次性显示这么多数据出来吗?

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧