mysql 语句优化

玉生香 2019-03-18 03:34:43


-- t3 2.8w数据
-- t2 2515条数据

-- t3 t2关联30w数据
-- t4 30w数据

-- 得到结果数据量是很少的


SELECT t3.nename,
t3.slotno,
t2.nelogicven,
t2.port,
t2.hoslot,
t2.loslot,
0,
1 status ,
1 createtype,
'system' creator ,
t3.createdate
FROM sdh_importfile_slotinfo_tmp t3
STRAIGHT_JOIN
sdh_importfile_slotdefine_list t2
WHERE t2.nelogicven = t2.nelogicven
AND t2.nelogicven = t3.nelogven
AND NOT EXISTS
(
SELECT 1 FROM sdh_cfg_h_neslotinfo t4
WHERE t3.nename = t4.nename
AND t3.slotno = t4.troughposi
AND t3.nelogven = t4.card
AND t2.port = t4.port
AND IFNULL(t2.hoslot,0) = IFNULL(t4.hoslot,0)
AND IFNULL(t2.loslot,0) = IFNULL(t4.loslot,0)
)


运行了6分钟还是没有结果 上面有解析计划。请大神们指教,如何修改。

...全文
235 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
AHUA1001 2019-03-22
  • 打赏
  • 举报
回复
引用 4 楼 玉生香 的回复:
[quote=引用 3 楼 AHUA1001 的回复:]
最大的问题还是在设计上,获取不在sdh_cfg_h_neslotinfo 里的条件是关键。


条件太多了。有点晕。对呀,设计就这么坑[/quote]

在下才疏学浅,直接在没有您的数据库情况下优化,真的有难度,及时有您的数据库,优化的空间也不大。
现在的瓶颈问题,在查询上。
根据我的经验,可以尝试以牺牲一部分写入的效率,来换取查询的效率。
办法是t2或者t3表上,增加一个字段,作为标识,通过这个字段的内容,替换您语言中NOT EXISTS后边的部分。
加完这个字段后,首先需要用NOT EXISTS后的内容,初始化新增的字段。
然后每次修改新增字段表的内容,都要更新新增的字段。
当然,前台是在不是很影响t2或者t3的前提下。
希望这个方案对您有帮助。
AHUA1001 2019-03-21
  • 打赏
  • 举报
回复
最大的问题还是在设计上,获取不在sdh_cfg_h_neslotinfo 里的条件是关键。
pjfsoft 2019-03-21
  • 打赏
  • 举报
回复
引用 5 楼 玉生香 的回复:
[quote=引用 2 楼 pjfsoft 的回复:] 加函数索引吧
函数索引? 何解?[/quote] AND IFNULL(t2.hoslot,0) = IFNULL(t4.hoslot,0) AND IFNULL(t2.loslot,0) = IFNULL(t4.loslot,0) 你这个两个条件是不走索引的
玉生香 2019-03-21
  • 打赏
  • 举报
回复
引用 2 楼 pjfsoft 的回复:
加函数索引吧



函数索引? 何解?
玉生香 2019-03-21
  • 打赏
  • 举报
回复
引用 3 楼 AHUA1001 的回复:
最大的问题还是在设计上,获取不在sdh_cfg_h_neslotinfo 里的条件是关键。


条件太多了。有点晕。对呀,设计就这么坑
pjfsoft 2019-03-20
  • 打赏
  • 举报
回复
加函数索引吧
玉生香 2019-03-19
  • 打赏
  • 举报
回复
顶上去,求解答

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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