1、in 与 exists: 外表大,用IN;内表大,用EXISTS; 原理: 用in:外表使用了索引,直接作hash连接; 用exists:内表使用了索引,外表作loop循环再进行匹配; 2、not in与not exists: 性能:not in不走索引,所以一般都用not exists; 区别 ...
分类:
其他好文 时间:
2019-04-28 15:46:42
阅读次数:
115
重点关注: 1) 没有查询条件,或者查询条件没有建立索引 例如: 在业务数据库中,特别是数据量比较大的表。是没有全表扫描这种需求。 1、对用户查看是非常痛苦的。 2、对服务器来讲毁灭性的。 例如: 2) 查询结果集是原表中的大部分数据,应该是25%以上。 查询的结果集,超过了总数行数25%,优化器觉 ...
分类:
数据库 时间:
2019-01-16 00:20:11
阅读次数:
349
1、避免一些不走索引的查询 1)避免在索引列上使用函数或者计算,如果这样,优化器将不再使用索引而使用全表扫描: Select * from T where hh*10>1000;(低效,优化器不再使用索引) Select * from T where hh>1000/10;(更高效,优化器将使用索引 ...
分类:
数据库 时间:
2018-12-05 12:36:02
阅读次数:
194
索引失效的各种原因 1、复合索引多个字段,如果在查询中都匹配到该复合索引的字段,则最好 2、如果索引了多列,要遵守最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中的列 4、如果(name, age, pos)三个字段,age查询用范围查询,age>18,则pos不走索引 5、覆盖索引:复 ...
分类:
其他好文 时间:
2018-08-14 14:37:08
阅读次数:
113
sql优化 + Insert使用批量 + 查询不要使用 , MySQ需要先查出表里的所有字段,再进行匹配 + 字符串的查询条件要带引号,否则可能不走索引 备份及恢复 + 备份 note: B备份指定库,使用 B备份文件中多了两行代码(create database dbname; use dbnam ...
分类:
数据库 时间:
2018-07-29 17:02:42
阅读次数:
180
有时候建立索引的时候不走索引,排除了字段数据问题和sql写法问题之外,应该是统计信息有问题,得重新收集。一:解锁统计信息为了稳定执行计划,一般统计信息都会被锁住的,在更新统计信息的时候得先解锁。①按用户schema解锁:EXECDBMS_STATS.UNLOCK_schema_STATS(‘user_name‘);②按表模式解锁:先查出被锁定的表selecttable_namefromuser_t
分类:
数据库 时间:
2018-06-25 17:50:05
阅读次数:
276
复合索引原则:最左前缀原则:index(a,b,c)1、每次查询必须有a,如ab,ac,abc,如果没有a,只有bc查询将失效2、查询中带or,查询失效3、查询中带%*,查询失效。4、where a=* andb>andc=*,c将不走索引索引是否生效可以使用mysql中的explainselect*进行分析,主要查看type、possiable_key来查看性能优化,执行时间并不是主要执行
分类:
数据库 时间:
2018-06-25 17:04:30
阅读次数:
655
sql一执行就卡住,然后就...杀进程了 看了一下表的大小 第一反应就是加索引,然后explain看了一下走什么索引了,结果很尴尬,三个表,只走了一个索引...一群人在那纠结为毛走不了索引。 无意间发现有个表的字符编码是gbk..另外两个都是utf8..网上查了一番,才发现当表的 编码 不一致的时候 ...
分类:
数据库 时间:
2017-11-29 00:12:23
阅读次数:
212
1、故障现象业务连接返回超时,数据库大量线程卡在了updating状态,锁等待十分严重,主机性能反而正常2、初步的处理查看错误日志,发现一个存储过程的执行时间很长,差不多1000s左右,打开存储过程,果然发现里面的某条语句就是卡在updating的语句;初步定位到单条sql导致的数据库卡顿,分析存储 ...
分类:
其他好文 时间:
2017-08-21 16:32:23
阅读次数:
256