<commit_before>---
layout: post
title:  "mysql 索引 学习"
date:   2016-03-10 00:16
categories: SQL
permalink: /Priest/SQL-index

---


##问题描述  

  今早过来，线上出现了大量的超时日志，昨晚上线了一个项目，涉及到很大的数据量，涉及到的几个表有千万级别，个别表达到亿级别，上线初自己手动测试，没有什么问题，但是今早一过来，监控显示2分钟内爆了3000+个超时，并且影响到其他的业务系统。
   
##定位  
   cat监控系统定位看了是我新增的服务超时导致，在具体到DAO层，锁定了几个DAO查询SQL。
   
##解决
###加索引
第一反应是加索引。查看到关联的表，有2张表的SQL查询漏了2个字段的索引，二话不说，赶紧让运维 加上去，然后超时的错误以及数据库负载立马降下来，妥妥的。 
   
一个小时过后，又有超时瞬间爆发，这次更厉害，3分钟内容，14405次超时错误。~~o(>_<)o ~~

###再次定位



##总结
1. 不要随便单纯根据SQL的字段加索引，要综合考虑所有关于该表的SQL语句进行设计索引
2. 优先创建联合索引 再考虑加单独的字段索引
3. 同一张表，不同数据量，同样的SQL语句可能的执行顺序不一致，索引使用可能不一致
4. 多个条件一起查询的时候 ,建联合索引一定要 模糊匹配的字段索引建在后面，比如c字段是模糊查询，建 （abcd）和（abdc）两种索引，前者只会有 abc3个索引生效，而后者是4个都会生效
5. 联合索引建立之后，联合索引的首个字段 不需要再建索引，免得浪费空间
6. 建索引时，优先采用区分度搞的字段，比如 status这种字段就没必要建索引

  <commit_msg>change<commit_after>---
layout: post
title:  "mysql 索引 学习"
date:   2016-03-10 00:16
categories: SQL
permalink: /Priest/SQL-index

---

##问题描述
4234234234
{'fraction_non_alphanumeric': 0.12513255567338283, 'fraction_numerical': 0.05832449628844114, 'mean_word_length': 6.151515151515151, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1991969', 'n_tokens_mistral': 774, 'n_tokens_neox': 875, 'n_words': 60}