1:索引失效:

全值匹配

最佳左前缀原则

从索引的最左边开始找查询语句中出现的列,一直到未出现

计算、函数、类型转换(自动或手动)导致索引失效

例1:

用LIKE进行模糊查询,索引生效,用left进行查询,索引失效

类型转换导致索引失效

# 未使用到索引 EXPLAIN SELECT SQL_NO_CACHE * FROM student WHERE                 name=123;

范围条件右边的列索引失效

不等于(!= 或者<>)索引失效

is null可以使用索引,is not null无法使用索引

like以通配符%开头索引失效

OR 前后存在非索引的列,索引失效

2:索引优化

关联查询优化:

  1. 左外连接

LEFT JOIN 条件用于确定如何从右表搜索行,左边一定都有,所以 右边是我们的关键点,一定需要建立索引 。

  1. join语句原理

join语句的执 行流程是这样的:

2. 从数据行R中,取出a字段到表t2里去查找;

4. 重复执行步骤1到3,直到表t1的末尾循环结束。

两个结论: 1. 使用join语句,性能比强行拆成多个单表执行SQL语句的性能要好;

2. 如果使用join语句的话,需要让小表做驱动表。

小结 :

保证被驱动表的JOIN字段已经创建了索引 需要JOIN 的字段,

数据类型保持绝对一致。

LEFT JOIN 时,选择小表作为驱动表, 大表作为被驱动表 。减少外层循环的次数。 INNER JOIN 时,MySQL会自动将 小结果集的表选为驱动表 。选择相信MySQL优化策略。

能够直接多表关联的尽量直接关联,不用子查询。(减少查询的趟数) 不建议使用子查询,建议将子查询SQL拆开结合程序多次查询,或使用 JOIN 来代替子查询。

衍生表建不了索引

排序优化(order by)

优化建议:

1. SQL 中,可以在 WHERE 子句和 ORDER BY 子句中使用索引,目的是在 WHERE 子句中 避免全表扫 描 ,在 ORDER BY 子句 避免使用 FileSort 排序 。当然,某些情况下全表扫描,或者 FileSort 排 序不一定比索引慢。但总的来说,我们还是要避免,以提高查询效率。

2. 尽量使用 Index 完成 ORDER BY 排序。如果 WHERE 和 ORDER BY 后面是相同的列就使用单索引列; 如果不同就使用联合索引。

3. 无法使用 Index 时,需要对 FileSort 方式进行调优。

索引实效的案例:

过程一:

未添加索引

过程二:

Oder by时没有limit,因为数据量较大时还需要回表,索引优化器默认优化,如果不需要回表则不需要。

过程三:order by 顺序错误

最左前缀原则

方向不一致(DESC,ASC)

优化分页查询

在索引上完成排序分页操作,最后根据主键关联回原表查询所需要的其他列内容。

该方案适用于主键自增的表,可以把Limit 查询转换成某个位置的查询

覆盖索引

:非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列 (即建索引的字段正好是覆盖查询条件中所涉及的字段)。 简单说就是, 索引列+主键 包含 SELECT 到 FROM之间查询的列 。

索引下推

java中node使用方法add nodelist java

LinkedList源码分析今天就来看下LinkedList的源码,先看下LinkedList的继承体系结构。public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Ser

一)张三李四——积极工作就会得到赏识 张三和李四同时受雇于一家店铺,他们拿同样的薪水。一段时间后,不知道怎么回事,张三青云直上,又是升职又是加薪,而李四却仍在原地踏步。李四不满意老板的不公正待遇,终于有一天他到老板那儿发牢骚了。老板一边耐心地听着他的抱怨,一边在心里盘算着怎样向他解释清楚他和张三之间的差别。 “李四,”老板开口说话了,“您现在到集市上去一下,看看今

java 线程多了 java多线程 线程池

创作的心路历程:一直都想对多线程进行一个全面的了解,但是内部分享直接对着代码进行分析不太友好。 所以就寻找一个切入点 就找到了 线程池(不细讲锁类型和Queue,专门开篇讲)。线程池都了解或使用过包含 重量级锁 轻量级 类似自旋锁多线程路上的基石正文带着问题 进行分析容易迷失代码中。准备基础知识 各类线程启动方式区别?线程池必备的基础知识点。重点探究的:线程池中的线程 如何复用?线程池中的线