点击上方 "程序员小乐"关注, 星标或置顶一起成长
每天凌晨00点00分, 第一时间与你相约
每日英文
If nothing can be done, then just let nature take its course.
如果无能为力,那就它顺其自然吧。
每日掏心话
一切顺其自然,专注于过程而少想结果,安于当下,不想过去亦不想未来,把每一个发生都当作一种修炼。
来自:素小暖OSC | 责编:乐乐
链接:my.oschina.net/u/4006148/blog/3225442
程序员小乐(ID:study_tech)第 834 次推文 图片来自百度
往日回顾:前后端分离模式下的权限设计方案
正文
最近在做有关查询数据库的工作,由于一个表的数据量过大,导致程序进程卡死情况出现,SQL优化迫在眉睫,索引闪亮登场!
Oracle中查询走索引的情况:
1、对返回的行无任何限定条件,即没有where子句。
2、未对数据表与任何索引主列相对应的行限定条件。
例如:在id-name-time列创建了三列复合索引,那么仅对name列限定条件不能使用这个索引,因为name不是索引的主列。
3、对索引的主列有限定条件,但是在条件表达式里使用以下表达式则会使索引失效,造成权标扫描:
(1)where子句中对字段进行函数、表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
(2)查询字段is null时索引失效,引起全表查询。
解决办法:SQL语法中使用null会有很多麻烦,最好索引列时not null的;对于is null,可以建立组合索引, nvl(字段,0),对表和索引analyse后,is null查询时可以重新启用索引查找,但是效率还不是值得肯定;is not null时永远不会使用索引。一般数据量大的表不要用is null查询。
(3) 查询条件中使用了不等于操作符(