1. EXISTS 和 IN 的区分
    问题:
    不太理解哪种情况下应该使用 EXISTS,哪种情况应该用 IN。选择的标准是看能否使用表的索引吗?
    回答:
    索引是个前提,其实选择与否还是要看表的大小。可以将在的标准理解为小表驱动大表。

    1. A表大 B表小,先把CC查出来给外面用,所以表小好
    2. SELECT * FROM A WHERE CC IN (SELECT CC FROM B);
    3. A表小 B表大,使用这个,减少嵌套循环次数
    4. SELECT * FROM A WHERE EXISTS (SELECT CC FROM B WHERE B.CC = A.CC);

    2. COUNT(*)与COUNT(具体字段)效率
    问:在 MySQL 中统计数据表的行数,可以使用三种方式: SELECT COUNT() 、 SELECT COUNT(1) 和 SELECT COUNT(具体字段) ,使用这三者之间的查询效率是怎样的?
    SELECT COUNT(
    ) SELECT COUNT(1) 执行时间可能略有差别,可以把它俩的执行效率看成相等的。不同存储引擎中性能是有所差别的。
    在InnoDB引擎中,如果采用COUNT(具体字段),尽量采用二级索引。因为聚簇索引包含的信息很多。 COUNT(1)COUNT() 会自动采用占用空间更小的二级索引来进行统计。
    **3. 关于SELECT(
    ) *
    在表查询中,建议明确字段,不要使用
    作为查询的字段列表,推荐使用SELECT <字段列表> 查询。
    原 因:
    ① MySQL 在解析的过程中,会通过查询数据字典 将”*”按序转换成所有列名,这会大大的耗费资源和时间。 ② 无法使用 覆盖索引 。

    1. LIMIT 1 对优化的影响

    针对的是会扫描全表的 SQL 语句,如果你可以确定结果集只有一条,那么加上 LIMIT 1 的时候,当找 到一条结果的时候就不会继续扫描了,这样会加快查询速度。
    如果数据表已经对字段建立了唯一索引,那么可以通过索引进行查询,不会全表扫描的话,就不需要加上 LIMIT 1 了。

    1. 多使用COMMIT

      只要有可能,在程序中尽量多使用 COMMIT,这样程序的性能得到提高,需求也会因为 COMMIT 所释放 的资源而减少。
      COMMIT 所释放的资源:
      回滚段上用于恢复数据的信息
      被程序语句获得的锁
      redo / undo log buffer 中的空间
      管理上述 3 种资源中的内部花费