索引失效场景
1、当使用or来组合多个查询条件的情况下,如果不是每一列的条件都有索引,索引整体表现失效;
2、当使用多列索引的时候,如果没有匹配到第一部分,索引失效;
3、当使用like的时候,以%开头,等价于全表扫描,此时索引失效;
4、当数据类型是字符串类型的时候,如果条件数据不是字符串类型,此时索引失效;
数据库性能优化点
1.合理的设计索引,避免查询无法命中索引导致全表扫描;
2.针对批量查询,使用贪婪模式,一次性读取一批数据,避免循环的多次读取(一般大于10条记录就应该如此);
3.合理评估负载容量,数据库连接池的连接数合理设置,避免阻塞在请求db链接上;
4.针对准静态数据设计逐级缓存,逐渐降低对db的依赖;
行锁
Select…For Update语句的语法与select语句相同,只是在select语句的后面加FOR UPDATE [NOWAIT]子句。
该语句用来锁定特定的行(如果有where子句,就是满足where条件的那些行)。当这些行被锁定后,其他会话可以选择这些行,但不能更改或删除这些行,直到该语句的事务被commit语句或rollback语句结束为止。