一.SQL性能下降原因 1.等待时间长?执行时间长? 可能原因: 查询语句写的不行 索引失效(单值索引.复合索引) CREATE INDEX index_user_name ON user(name); (底层做了一个排序) CREATE INDEX index_user_nameEmail ON user(name,email); 技术原理参见:http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 索引入门知识参见:htt
一.背景 随着公司业务的发展,商品库存从商品中心独立出来成为一个独立的系统,承接主站商品库存校验.订单库存扣减.售后库存释放等业务.在上线之前我们对于核心接口进行了压测,压测过程中出现了 MySQL 5.6.35 死锁现象,通过日志发现引发死锁的只是一条简单的sql,死锁是怎么产生的?发扬技术人员刨根问底的优良传统,对于这次死锁原因进行了细致的排查和总结.本文既是此次过程的一个记录. 在深入探究问题之前,我们先了解一下 MySQL 的加锁机制. 二.MySQL 加锁机制 首先要明确的一点是 My
SELECT t.val, m.username FROM test.tmp_table AS t LEFT JOIN cehome.uc_members AS m USE INDEX(`mobile`) ON t.val=m.mobile 上面的left join uc_members表的mobile字段没有用到索引,是因为uc_members表的 ENGINE=MyISAM DEFAULT CHARSET=gbk 和 tmp_table表类型的表编码不一致 最好两个表的类型和编码要一致,
第一:选择唯一性索引 唯一性索引的值是唯一的,可以更快捷的通过该索引来确定某条记录. 2.索引的列为where 后面经常作为条件的字段建立索引 如果某个字段经常作为查询条件,而且又有较少的重复列或者是唯一咧可以考虑作为索隐列 经常作为查询条件的列作为索引会提高速度 3.位经常需要进行排序.分组和联合操作的的字段建立索引. order by group by distinct union 这种情况下在查询的时候排序会浪费很多的时间, 如果为其建立索引可以有效的避免排序操作. 4.限制索引的的数
今天遇到一个left join优化的问题,搞了一下午,中间查了不少资料,对MySQL的查询计划还有查询优化有了更进一步的了解,做一个简单的记录: select c.* from hotel_info_original c left join hotel_info_collection h on c.hotel_type=h.hotel_type and c.hotel_id =h.hotel_id where h.hotel_id is null 这个sql是用来查询出c表中有h表中无的记