解读: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语句执行,提高执行效率,减少与数据库的交互。总结:大数据量高并发的互联网业务,极大影响数据库性能的都不让用,不让用哟。