MYsql IN谓词优化
来源:互联网 发布:软件下载网线 编辑:程序博客网 时间:2024/05/16 07:07
最近在完成小任务时,遇到多表联查的问题,更改某个数据表中符合过滤条件的商品的分类字段:cat_paths
数据表结构简化如下
数据表1,product:
product_id product_name cat_paths
123 '补差价' '58.70'
数据表2,price:
product_id sale_price
123 100
需求将满足sale_price为100元的商品的的cat_paths改为“58.70”。
刚开始使用的sql语言是:
update product set cat_paths = "58.70" where product_id in (select product_id from price where sale_price = 100)
由于数据量较大,上面sql执行时间较长。
经过查阅资料优化为如下sql:
update product,(select product_id from price where sale_price = 100) set cat_paths = "58.70"
经过优化后执行时间缩短一半。
经过这个小项目,自己几乎是从0开始使用mysql,使用过程中的总结如下:
1、中文乱码问题:
解决办法:set names gbk;
2、OUTER JOIN外连接问题:
right join;inner join;right join的不同,会出现数据重复的问题。注意添加where过滤条件。
3、子查询中的IN Mysql会将IN转化为exists,会使时间执行较长。
解决办法:针对大数据量,尽量不要使用IN,将子查询改写成派生表的来提高效率,如上例就使用了此方法。
4、查看sql语言的执行计划:
使用explain sql;命令,如果想得到更具体的执行计划使用explain extended sql;
5、like 模糊匹配的使用。
like '%key%';
6、in 和 exists的区别:
in 和 exists是一样的,具有相同的执行计划。但是not in 和 not exists具有很大的区别,exists对于三值逻辑的判断, exists总是返回true和false, 但是对于IN来说,除了TRUE和FLSE值外,还有可能对NULL值返回UNKNOWN.
输入列表中包含NULL值时,NOT EXISTS和NOT IN 之间的差异很明显,在输入列表中包含NULL值时,IN总是返回TRUE和UNKNOWN,因此not in 总是返回NOT TURE HE NOT UNKNOWN,即false和unknown.
select 'c' not in ('a','b',NULL) 返回的是null而不是true。
- MYsql IN谓词优化
- MySQL查询优化器--逻辑查询优化技术(七)--等价谓词重写
- mysql in语句优化
- MySQL in查询优化<一>
- mysql In和EXISTS优化
- mysql in() 子查询 优化
- Mysql的等价谓词重写
- mysql not in 或in 优化
- mysql not in 或 in 优化
- 谓词
- 谓词
- 谓词
- 谓词
- 谓词
- 谓词
- 谓词
- 谓词
- 谓词
- Python爬虫实战二:下载百度贴吧帖子内的壁纸
- Java多线程学习(吐血超详细总结)
- WEB性能权威指南学习笔记 Item03
- Struts文件上传包含修改文件上传参数,多文件上传
- 优先队列
- MYsql IN谓词优化
- SQLserver 关于 left join group by 等用法笔记
- 关于table设置固定宽度高度自适应
- javascript日常
- 洛谷 P1014 Cantor表
- 回调函数
- Ajax ファイルダウンロード MVC(vb)
- java设计模式-策略模式
- 与初恋结婚的概率是1%