数据库|快速提升性能的SQL语句,建议收藏( 四 )


  • 索引应该建在小字段上 , 对于大的文本字段甚至超长字段 , 不要建索引;
  • 复合索引的建立需要进行仔细分析 , 尽量考虑用单字段索引代替;
  • 正确选择复合索引中的主列字段 , 一般是选择性较好的字段;
  • 复合索引的几个字段是否经常同时以 AND 方式出现在 WHERE 子句中?单字段查询是否极少甚至没有?如果是 , 则可以建立复合索引;否则考虑单字段索引;
  • 如果复合索引中包含的字段经常单独出现在 WHERE 子句中 , 则分解为多个单字段索引;
  • 如果复合索引所包含的字段超过 3 个 , 那么仔细考虑其必要性 , 考虑减少复合的字段;
  • 如果既有单字段索引 , 又有这几个字段上的复合索引 , 一般可以删除复合索引;
  • 频繁进行数据操作的表 , 不要建立太多的索引;
  • 删除无用的索引 , 避免对执行计划造成负面影响;
  • 表上建立的每个索引都会增加存储开销 , 索引对于插入、删除、更新操作也会增加处理上的开销 。 另外 , 过多的复合索引 , 在有单字段索引的情况下 , 一般都是没有存在价值的;相反 , 还会降低数据增加删除时的性能 , 特别是对频繁更新的表来说 , 负面影响更大 。
  • 尽量不要对数据库中某个含有大量重复的值的字段建立索引 。
  • 40、MySQL 查询优化总结:
    使用慢查询日志去发现慢查询 , 使用执行计划去判断查询是否正常运行 , 总是去测试你的查询看看是否他们运行在最佳状态下 。
    久而久之性能总会变化 , 避免在整个表上使用 count(*) , 它可能锁住整张表 , 使查询保持一致以便后续相似的查询可以使用查询缓存 , 在适当的情形下使用 GROUP BY 而不是 DISTINCT , 在 WHERE、GROUP BY 和 ORDER BY 子句中使用有索引的列 , 保持索引简单 , 不在多个索引中包含同一个列 。
    有时候 MySQL 会使用错误的索引 , 对于这种情况使用 USE INDEX , 检查使用 SQL_MODE=STRICT 的问题 , 对于记录数小于5的索引字段 , 在 UNION 的时候使用LIMIT不是是用OR 。
    为了避免在更新前 SELECT , 使用 INSERT ON DUPLICATE KEY 或者 INSERT IGNORE;不要用 UPDATE 去实现 , 不要使用 MAX;使用索引字段和 ORDER BY子句 LIMIT M , N 实际上可以减缓查询在某些情况下 , 有节制地使用 , 在 WHERE 子句中使用 UNION 代替子查询 , 在重新启动的 MySQL , 记得来温暖你的数据库 , 以确保数据在内存和查询速度快 , 考虑持久连接 , 而不是多个连接 , 以减少开销 。
    基准查询 , 包括使用服务器上的负载 , 有时一个简单的查询可以影响其他查询 , 当负载增加在服务器上 , 使用 SHOW PROCESSLIST 查看慢的和有问题的查询 , 在开发环境中产生的镜像数据中测试的所有可疑的查询 。
    41、MySQL 备份过程: