MCU与MPU之间的界限
|
这样可以避免临时表跟排序的产生,最终查询行数 = C + (Y1+1) + (Y2+1) + (Y3+1) exist 和 in 对比: 1、in查询时首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。 2、子查询使用 exists,会先进行主查询,将查询到的每行数据循环带入子查询校验是否存在,过滤出整体的返回数据。 3、两表大小相当,in 和 exists 差别不大。内表大,用 exists 效率较高;内表小,用 in 效率较高。 4、查询用not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。not exists都比not in要快。 10、MySQL优化 SQL优化主要分4个方向:SQL语句跟索引、表结构、系统配置、硬件。 总优化思路就是最大化利用索引、尽可能避免全表扫描、减少无效数据的查询: 1、减少数据访问:设置合理的字段类型,启用压缩,通过索引访问等减少磁盘 IO。 2、返回更少的数据:只返回需要的字段和数据分页处理,减少磁盘 IO 及网络 IO。 3、减少交互次数:批量 DML 操作,函数存储等减少数据连接次数。 4、减少服务器 CPU 开销:尽量减少数据库排序操作以及全表查询,减少 CPU 内存占用 。 5、分表分区:使用表分区,可以增加并行操作,更大限度利用 CPU 资源。 SQL语句优化大致举例: 1、合理建立覆盖索引:可以有效减少回表。 2、union,or,in都能命中索引,建议使用in 3、负向条件(!=、<>、not in、not exists、not like 等) 索引不会使用索引,建议用in。 4、在列上进行运算或使用函数会使索引失效,从而进行全表扫描 5、小心隐式类型转换,原字符串用整型会触发CAST函数导致索引失效。原int用字符串则会走索引。 6、不建议使用%前缀模糊查询。 7、多表关联查询时,小表在前,大表在后。在 MySQL 中,执行 from 后的表关联查询是从左往右执行的(Oracle 相反),第一张表会涉及到全表扫描。 8、调整 Where 字句中的连接顺序,MySQL 采用从左往右,自上而下的顺序解析 where 子句。根据这个原理,应将过滤数据多的条件往前放,最快速度缩小结果集。 SQL调优大致思路: 1、先用慢查询日志定位具体需要优化的sql 2、使用 explain 执行计划查看索引使用情况 3、重点关注(一般情况下根据这4列就能找到索引问题):
4、根据上1步找出的索引问题优化sql 5、再回到第2步 (编辑:柳州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


