在线客服
扫描二维码
下载博学谷APP扫描二维码
关注博学谷微信公众号
数据库其实就是电子化的文件柜,用于储存数据,同时用户可以对数据进行增删改查等操作。在企业应用中,数据库非常重要,所以程序员在面试的时候,经常被提问关于数据库的问题。那当面试官问到你所了解的数据库优化都有哪些,你应该如何回答呢?
一、问题分析
考官主要是对数据库优化方面的考核,一般数据库优化分为性能和应用方面的,如你了解 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 位图索引
MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引
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 多个字段),通过"大表拆小表",更便于开发与维护,也能避免跨页问题
水平分表
水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果(如订单表)
当你看到这篇文章,未来再遇到面试官提问“你所了解的数据库优化都有哪些?”问题的时候,就再也不用担心了。面试不仅仅是进入企业的敲门砖,同时也是检验自己技术知识掌握的熟练程度。对于某个掌握不熟练的知识点,一定要经常的温习,或者找相关的实战项目联系。对于这篇文章,建议大家收藏。
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
Java性能调优要注意什么?又有哪些方式?
Java性能调优要注意什么?又有哪些方式?一般来说,Java性能调优有着以下几个原则,即充分而不过分使用硬件资源、合理调整JVM和合理使用JDK包。在Java性能调优的过程中,我们要注意调优步骤、性能瓶颈的表象、外部处理系统的性能不足、CPU消耗分析、上下文切换等等。而Java性能调优的方式主要有设计调优、代码调优、JVM调优、数据库调优和操作系统调优。
4660
2020-01-13 09:45:41
Java编程八大技能你还不会?
Java编程八大技能你还不会?随着大数据的快速发展,应用范围超广的Java编程语言越来越被看好。许多人包括在职程序员也兴致勃勃也报了Java编程课程,你是否也下定决心要进入Java开发呢?在大家进行Java培训学习之前,想和大家说明一个问题。Java技术的世界是多元而复杂的,需要程序员不断学习。想入行必须做好吃苦的准备。而要想作为互联网Java工程师这些基础技能必须要掌握。
3703
2020-06-12 14:31:18
高级Java 程序员要掌握哪些职业技能?
要学习Core Java、多线程并发编程、I/O、JVM、设计模式、常用数据库JavaWeb开发的框架、Netty 等基础知识,Netty 简单易用容易上手,但网络编程复杂,会存在各种的状况和可能性。
3897
2020-10-23 15:45:43
Redis相关常见面试题有哪些?
作为一名Java程序面试过程中会被问到Redis相关的问题,这里对其常见问题做了梳理。Redis是一个使用C语言编写的开源高性能非关系型的键值对数据库。Redis可以存储键和五种不同类型的值之间的映射。键的类型只能为字符串,值支持五种数据类型:字符串、列表、集合、散列表、有序集合。
3388
2021-03-16 14:50:12
成为架构师,读书之外什么更重要?
做架构师这几年,除了去官网看技术说明书学习前沿技术,也买了不少架构师思维层面的书籍,硬性与软性实力同时提升,让自己做工作才游刃有余。 最近有不少同学留言让我推荐架构师相关的书籍,特此找出曾经拜读的几本书,分享给大家,也希望大家多看看别人的看法和观念,开拓一下思路。
2192
2022-07-25 11:32:10