美文网首页
索引的技术点

索引的技术点

作者: 上海马超23 | 来源:发表于2017-08-21 22:58 被阅读0次

    联合索引:多字段组合索引,加速组合条件查询

    联合索引要满足从左到右的查询需求,例如(a,b,c)的联合索引,能够加速 a|(a,b)|(a,b,c) 三组查询需求。但不能满足 b|(b,a)等查询需求。

    in查询

    select * from where 索引字段 in (xxx,yyy) 能够命中索引

    or查询

    select * from where 索引字段 = xxx or 索引字段 = yyy
    只有新版本的MySql能够命中索引

    !=查询 肯定不能命中索引 (包括not in、not exists)

    枚举项少的字段不宜作为索引

    代码里使用enum不要用String,enum占用空间小且效率高。

    明确知道只有一条结果,使用limit 1能够提高效率。

    计算不要放到数据库层,放到上游应用层,能够增加命中查询缓存几率,另外应用层的计算性能可以做增加集群水平扩展,数据库擅长的是存储与索引。

    多次调用相同的sql,能够命中查询缓存。
    禁止使用存储过程、视图、触发器、Event。

    大型文件只存放url

    表的主键要递增,数据行写入可以提高插入性能,可以避免索引page分裂,减少表碎片提升空间和内存的使用

    主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率。
    详见mysql索引B+树结构介绍:http://hedengcheng.com/?p=525

    禁止使用外键,约束性靠应用控制。

    外键会导致表与表紧耦合,update或delete影响sql性能,会造成死锁。不使用外键,使用最终一致性牺牲强一致性,换取性能

    必须把字段定义为NOT NULL并且提供默认值

    1. null的列使索引/索引统计/值比较都更加复杂,对MySQL来说更难优化
    2. 对null 的处理时候,只能采用is null或is not null,而不能采用=、in、<、<>、!=、not in这些操作符号。如:where name!=’shenjian’,如果存在name为null值的记录,查询结果就不会包含name为null值的记录

    相关文章

      网友评论

          本文标题:索引的技术点

          本文链接:https://www.haomeiwen.com/subject/oqkqdxtx.html