关于数据库查询业务的几点思考


一、对查询字段建索引;

这个效果很明显,建索引能够提高很是大的速度;html

在这里不得不讲一下普通索引和惟一性索引的区别:数据库

  1. 普通索引编程

  普通索引的惟一任务是加快对数据的访问速度。所以,应该只为那些最常常出如今查询条件(WHERE column = )或排序条件(ORDER BY column)中的数据列建立索引。只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来建立索引。app

  1. 惟一索引编程语言

  普通索引容许被索引的数据列包含重复的值。好比说,由于人有可能同名,因此同一个姓名在同一个“员工我的资料”数据表里可能出现两次或更屡次。 若是能肯定某个数据列将只包含彼此各不相同的值,在为这个数据列建立索引的时候就应该用关键字UNIQUE把它定义为一个惟一索引。这么作的好处:一是简化了MySQL对这个索引的管理工做,这个索引也所以而变得更有效率;二是MySQL会在有新记录插入数据表时,自动检查新记录的这个字段的值是否已经在某个记录的这个字段里出现过了;若是是,MySQL将拒绝插入那条新记录。也就是说,惟一索引能够保证数据记录的惟一性。事实上,在许多场合,人们建立惟一索引的目的每每不是为了提升访问速度,而只是为了不数据出现重复。学习

  1. 复合索引大数据

    用户能够在多个列上创建索引,这种索引叫作复合索引(组合索引)。 复合索引在数据库操做期间所需的开销更小,能够代替多个单一索引;同时有两个概念叫作窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;设计索引的一个重要原则就是能用窄索引不用宽索引,由于窄索引每每比组合索引更有效;优化

当创建复合索引index(column1,column2,column3),这就至关于创建了如下三个索引:人工智能

index(column1),index(column1,column2)index(column1,column2,column3)  // 跟三个字段的顺序没有关系   好比:index(column3,column1,column2),它们是同样的效果

注意事项:spa

  • 对于复合索引,在查询使用时,最好将条件顺序按照索引的顺序,这样效率最高;

select * from table1 where col1=A AND col2=B AND col3=D

若是使用 where col2=B AND col1=A 或者 where col2=B 将不会使用索引

  • 什么时候使用复合索引
    根据where条件建索引是极其重要的一个原则; 注意不要过多用索引,不然对表更新的效率有很大的影响,由于在操做表的时候要化大量时间花在建立索引中

  • 复合索引会替代单一索引么
    若是索引知足窄索引的状况下能够创建复合索引,这样能够节约空间和时间

备注: 对一张表来讲,若是有一个复合索引 on (col1,col2),就没有必要同时创建一个单索引 on col1; 若是查询条件须要,能够在已有单索引 on(col1)的状况下,添加复合索引on (col1,col2),对于效率有必定的提升 同时创建多字段(包含五、6个字段)的复合索引没有特别多的好处,相对而言,创建多个窄字段(仅包含一个,或顶多2个字段)的索引能够达到更好的效率和灵活性

二、不要连表查询

2.1 如何处理不在表中的字段的展现?

先查对应数据的页,在经过页中的数据id,到其它表中查找须要的字段; 好比A表中有字段 Aid, colA1, colA2 ,B表中有字段 Bid, colB1, colB2, Aid, 而须要获取的字段有 colB1, colB2,colA1, colA2 这个时候能够这样操做:

  • 第一步:根据查询条件获取B表中的数据 Bid, coldB1, colB2, Aid

  • 第二步:根据获取到的Aid,从A表中获取另外两列colA1, colA2 尽可能获取数据的方式没有连表查询来的简单,但能够在大数据量的时候,减小查询或者传输数据所消耗的时间,尤为是在分页查询的时候。

2.2 如何处理在查询条件中的字段?

先将查询条件从其它表中找出对应的id,再将id做为查询条件,至目标表中进行查询;

一样是2.1中所提到的A,B表。假如查询字段是colA1,而须要获取的字段是colB1, colB2 这个时候能够这样操做:

  • 第一步:根据colA1,线从A表中获取对应的数据Aid字段(当查询前已经能够肯定Aid时,该步骤能够省略,这步更适合colA1是做为模糊查询呢的条件进行查询的状况)

  • 第二步:根据Aid字段,从B表中获取所须要的字段colB1,colB2

一样,该组查询也只是考虑在数据量比较大的时候,对于小数据的时候,没什么必要。

2.3 其它减小连表查询的方法

  • 提供冗余字段,即将A表中须要展现的字段,提早放入B表中,两边各存一份,这会增长维护和更新的成本,但能够避免连表查询,能够视业务场景考虑使用

3 结尾

以上仅仅是我的对数据库中部分查询业务的思考,但愿在服务运行过程当中,能够对服务的调用起到必定的效率提高,如处理方式不妥之处,还请各位大大指正,共同探讨更好的优化方案。


本文来自网易云社区 ,经做者王飞受权发布。

网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区


相关文章:
【推荐】 网易云社区开年活动:人工智能热门图书大抽奖!
【推荐】 6本互联网技术畅销书免费送(数据分析、深度学习、编程语言)!

相关文章
相关标签/搜索