SELECT dir1.url from dir1 LEFT JOIN dir2 on dir2.url=dir1.url where dir2.id is null or dir1.md5<>dir2.md5
如题,此语句当数据量大的时候会宕机
求助大神帮我想想怎么优化一下
因为我不是做这个的,我只是在c语言一个程序中用到了
然后用我的程序的人说会很慢,而且cpu占用率高
求助帮我优化
数据有多大?看看执行计划 找出瓶颈在那里。
先用explain查看一下执行的性能评估
然后就是你的索引是否利用上了
1、索引需要遵循最左原则
2、使用内存表
在csdn里面有人发过一篇叫做“数据库性能优化之SQL语句优化”的博文,里面讲的就是如何优化以及提升效率,应该会对楼主有用,可以去看看
看了下sql,主要感觉存在问题的是 dir2.url = dir1.url / dir2.id IS NULL / dir1.md5 <> dir2.md5 三个地方。
优化步骤:
1、给 每张表 url 价格 64 bit 的 hash 值存储字段,例如:url_code 该字段加索引
2、dir2.id 若存在是 null 的话,该字段加索引,给个默认常量值
3、第三个条件,也不知道你具体逻辑是什么,但是能改 不使用 <> 最好改了。
最后可以 sql 可以这样。
SELECT
dir1.url
FROM
dir1
LEFT JOIN dir2 ON dir2.url = dir1.url
WHERE
dir2.id IS NULL
UNION ALL
SELECT
dir1.url
FROM
dir1
LEFT JOIN dir2 ON dir2.url = dir1.url
WHERE
dir1.md5 <> dir2.md5
若有帮助,望采纳.......