索引使用及SQL编写规范

索引使用及SQL编写规范

索引失效:

1.索引中不能有列的值时null所以is null或者not null索引不起作用
2.单独引用符合索引中非第一位置的索引列:比如索引是a b c,那么a/a b/c不行
3.对索引列运算包括(+、-、*、/、!、<>、%、like‘%_’(%放在前面)、or、in、exist等)
4.对索引内部应用比如:select * from table_A where ROUND(id)=1此时应该建ROUND(id)为索引。
5.类型错误,如字段类型为varchar,where条件用number
6.当or条件时,必须所有的条件都是独立索引才能走索引
7.mysql查询只能使用一个索引,如果where中已经使用了索引,那么order by中就无法使用。 Select * from table_A where ID=x and number=y 如果这里的ID和number都建立了独立索引,只能走第一个ID。想继续提高速度只能建立组合索引。

不适合建立索引:

1.频繁更新的字段
2.where条件用不到的字段
3.表数据比较少的字段
4.数据重复且发布比较均匀的字段(唯一性较差的字段不适合建立索引)
5.参与计算的列不适合建立索引

必须加索引的:

1.主键自动建立唯一索引
2.频繁作为where条件语句查询的字段
3.关联字段需要建立索引,比如join on的字段
4.排序字段可以建立索引
5.分组字段可以建立索引,因为分组的前提是排序
6.统计字段,聚合函数可以建立索引,count() max()等

SQL编写规范

a)禁止使用SELECT *,只获取必要的字段,需要显示说明列属性。
b)禁止使用INSERT INTO t_xxx VALUES(xxx),必须显示指定插入的列属性。
c)禁止使用属性隐式转换,例如:SELECT uid FROM t_user WHERE phone=13800000000 会导致全表扫描,而不能命中phone索引。
d)禁止在WHERE条件的属性上使用函数或者表达式:SELECT uid FROM t_user WHERE from_unixtime(day)>=‘2020-06-25’ 会导致全表扫描,正确的写法是:SELECT uid FROM t_user WHERE day>= unix_timestamp(‘2020-06-25 00:00:00’)
e)禁止使用负向查询条件:NOT、!=、<>、!<、!>、NOT IN、NOT LIKE等,会导致全表扫描。
f)禁止使用%开头的模糊查询,会导致全表扫描。
g)禁止大表使用JOIN查询,或使用子查询:会产生临时表,消耗较多内存与CPU,极大影响数据库性能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值