MySQL开发规范 (2)

解读:SELECT uid FROM t_user WHERE phone=13800000000 会导致全表扫描,而不能命中phone索引,猜猜为什么?(这个线上问题不止出现过一次)

26、禁止在WHERE条件的属性上使用函数或者表达式

解读:SELECT uid FROM t_user WHERE from_unixtime(day)>='2017-01-15' 会导致全表扫描

正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-01-15 00:00:00')

27、禁止负向查询,以及%开头的模糊查询

解读:

负向查询条件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描

%开头的模糊查询,会导致全表扫描

28、禁止大表使用JOIN查询,禁止大表使用子查询

解读:会产生临时表,消耗较多内存与CPU,极大影响数据库性能

29、禁止使用OR条件,必须改为IN查询

解读:旧版本Mysql的OR查询是不能命中索引的,即使能命中索引,为何要让数据库耗费更多的CPU帮助实施查询优化呢?

30、应用程序必须捕获SQL异常,并有相应处理 31、同表的增删字段、索引合并一条DDL语句执行,提高执行效率,减少与数据库的交互。

总结:大数据量高并发的互联网业务,极大影响数据库性能的都不让用,不让用哟。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfpyy.html