一个项目中能提出哪些数据库优化_你所了解的数据库优化都有哪些?

数据库其实就是电子化的文件柜,用于储存数据,同时用户可以对数据进行增删改查等操作。在企业应用中,数据库非常重要,所以程序员在面试的时候,经常被提问关于数据库的问题。那当面试官问到你所了解的数据库优化都有哪些,你应该如何回答呢?

一、问题分析

考官主要是对数据库优化方面的考核,一般数据库优化分为性能和应用方面的,如你了解sql优化吗;百万数据怎么优化等

二、核心答案讲解

1、根据服务层面 、配置mysql性能优化参数;

2、从系统层面增强mysql的性能 、优化数据表结构、字段类型、字段索引、分表,分库、读写分离等等。

3、从数据库层面增强性能 、优化SQL语句,合理使用字段索引。

4、从代码层面增强性能 、使用缓存和NoSQL数据库方式存储,如MongoDB/Memcached/Redis来缓解高并发下数据库查询的压力。

5、减少数据库操作次数,尽量使用数据库访问驱动的批处理方法。

6、不常使用的数据迁移备份,避免每次都在海量数据中去检索。

7、提升数据库服务器硬件配置,或者搭建数据库集群。

8、编程手段防止SQL注入 、使用JDBC PreparedStatement按位插入或查询;正则表达式过滤(非法字符串过滤);

三、问题扩展

1、Sql优化

1)应尽量避免在where子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描;

2)应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如 、select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询 :

select id from t where num=0;

3)很多时候用exists代替in是一个好的选择;

4)用Where子句替换HAVING子句 因为HAVING只会在检索出所有记录之后才对结果集进行过滤;

5)select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的;

2、索引

1)索引概念 、对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果我们把一个表的内容认为是一本字典,那索引就相当于字典的目录

2)索引类型 :

逻辑上 :Single column单行索引

Concatenated多行索引

Unique唯一索引

NonUnique非唯一索引

Function-based函数索引

Domain域索引

物理上:

Partitioned分区索引

NonPartitioned非分区索引

B-tree:

Normal正常型B树

Rever Key反转型B树

Bitmap位图索引

索引分为普通索引、唯一索引、主键索引、组合索引、全文索引

3)何时使用索引

①主键,unique字段;

②和其他表做连接的字段需要加索引;

③在where里使用>,≥,=,<,≤,is null和between

等字段;

④使用不以通配符开始的like,where A like 'China%';

⑤聚集函数MIN(),MAX()中的字段;

⑥order by和group by字段;

4)索引何时失效

①组合索引未使用最左前缀,例如组合索引(A,B),where B=b不会使用索引;

②like未使用最左前缀,where A like '%China';

③搜索一个索引而在另一个索引上做order by,whereA=a order by B,只使用A上的索引,因为查询只使用一个索引 ;

④or会使索引失效。如果查询字段相同,也可以使用索引。例如where A=a1 or A=a2(生效),where A=a orB=b(失效)

⑤如果列类型是字符串,要使用引号。例如whereA='China',否则索引失效(会进行类型转换);

⑥在索引列上的操作,函数(upper()等)、or、!=(<>)、not in等;

四、结合项目中使用

1.常用但不经常修改的字段建索引(譬如商品表的商品名称等字段),达到检索速度增快,用户体验度增高的目的

2.用mycat进行分库分表

垂直拆分是基于数据库中的"列"进行,某个表字段较多,可以新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。例如用户表,在字段很多的情况下(例如一个大表有100多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题

水平分表

水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果(如订单表)

当你看到这篇文章,未来再遇到面试官提问“你所了解的数据库优化都有哪些?”问题的时候,就再也不用担心了。面试不仅仅是进入企业的敲门砖,同时也是检验自己技术知识掌握的熟练程度。对于某个掌握不熟练的知识点,一定要经常的温习,或者找相关的实战项目联系。对于这篇文章,建议大家收藏。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值