问题描述: 最近几天生产环境上的mongodb一直在报警,cpu飙高,其他如内存、iops、连接数、磁盘操作等都正常。通过定位业务,发现是由于mongodb的表其中一个查询未建立索引导致,110多W的数据,每秒经历的查询10次左右。但是未建立索引导致数据查询走全表扫描,从而致使导致cpu飙高。 解决 ...
分类:
数据库 时间:
2017-09-08 13:30:56
阅读次数:
346
原则一:注意WHERE子句中的连接顺序: ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾. 尤其是“主键ID=?”这样的条件。 原则二: SELECT子句中避免使用 ‘ * ‘ ...
分类:
数据库 时间:
2017-09-07 21:33:12
阅读次数:
191
Oracle 索引失效的六大限制条件 【原创】能使 Oracle 索引失效的六大限制条件 Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反。 例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle ...
分类:
数据库 时间:
2017-09-05 15:44:27
阅读次数:
191
Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于MySQL后台的完整数据库系统,mysql运行时Innodb会在内存中建立缓冲池,用于缓冲数据和索引。但是该引 ...
分类:
数据库 时间:
2017-09-05 13:33:47
阅读次数:
249
一、索引 表的数据是无序的,所以叫堆表(heap table),意思为随机存储数据。因为数据是随机存储的,所以在查询的时候需要全表扫描。索引就是将无序的数据有序化,这样就可以在查询数据的时候 减少数据块的读取,实现快速定位数据。对大表的排序是非常消耗资源的,索引是事先排好序,这样就可以在需要排序的时 ...
分类:
数据库 时间:
2017-08-27 11:02:16
阅读次数:
201
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在nu ...
分类:
数据库 时间:
2017-08-25 21:00:26
阅读次数:
266
星型转换的基本思路是尽量避免直接去扫描星型模式中的事实表,因为这些事实表总会因为存有大量数据而十分庞大,对这些表的全表扫描会引起大量物理读并且效率低下。在典型的星型查询中,事实表总是会和多个与之相比小得多的维度表发生连接(join)操作。典型的事实表针对每一个维..
分类:
数据库 时间:
2017-08-24 20:02:37
阅读次数:
259
1.要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注、描述、评论之类 ...
分类:
数据库 时间:
2017-08-21 00:28:28
阅读次数:
187
优化SQL语句的方法 首先,对于where语句的注意事项: 1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null ...
分类:
数据库 时间:
2017-08-20 12:31:07
阅读次数:
259
一、数据访问操作符 1、SCAN操作符:扫描操作主要分为3种 Table Scan:当针对一个表(没有聚集索引、堆表)执行一个查询语句时, 此时将会做全表扫描操作(如果有where子句,则先执行全表扫描操作,然后在针对结果集做Filter操作) 示例: Cluster Index Scan:聚集索引 ...
分类:
其他好文 时间:
2017-08-20 00:48:52
阅读次数:
245