写一下我对数据库优化的理解,欢迎大家补充

1,sql层面:加索引(注意索引失效场景),索引覆盖(减少一次回表)where后面的条件不在索引上会加表锁
2,表层面:遵守三大范式,尽量不用外键,使用中间表,建表时选择合适的字段(比如如果性别用0,1表示char就会比varchar好)字段要求唯一时建唯一索引比业务中判断是否唯一好(可以了解一下唯一索引和主键索引的区别)
3,数据库层面,如果很少使用范围查询,可以考虑将RR隔离级别换为RC隔离级别(如果你回答了这条,一定要去了解一下RR隔离级别下的间隙锁之类的,防止面试官深问回答不出来)
4,业务层面,redis缓存一些热点数据,用业务去解决一些并发问题,我曾经遇到过一个问题,小程序远程去开一个井(硬件),因为回来消息比较慢,中间其他用户再去开井会出问题。我的解决方案:当一个用户开完井后,将井的sn编号存到redis中并设置一个过期时间,其他用户开井时要去reids中查找是否有这个sn编号,有则无法开。
全部评论
其他方面优化数据库查询操作: 1. 避免使用 SELECT *,只查询需要的列。这可以减少数据传输量和提高查询效率。 2. 避免在 WHERE 子句中对列进行运算或函数操作。这会导致索引失效,进而影响查询性能。 3. 避免使用 OR 操作符,尽可能使用 UNION 操作符替代。 4. 使用 EXISTS 或者 IN 子查询替代多表联接操作。 5. 尽量避免在查询中使用 LIKE 操作符,如果必须使用,可以考虑使用全文索引。 6. 避免在 WHERE 子句中对索引列进行类型转换,这会导致索引失效。 7. 对于大批量插入数据,可以考虑使用 LOAD DATA INFILE 或者 INSERT INTO ... VALUES (...) 多行插入,而非单行插入。 8. 对于需要排序的查询结果,使用 ORDER BY 子句时尽量使用索引列进行排序。 9. 对于查询结果不太稳定的情况,可以使用 MySQL 的查询缓存,缓存查询结果,提高查询效率。 10. 使用 EXPLAIN 命令分析 SQL 查询语句的执行计划,找出查询中的性能瓶颈,进行优化。
点赞 回复 分享
发布于 2023-05-09 17:41 河南
chatgpt对每个方面的补充和说明: 1. SQL层面: 加索引可以提高查询效率,但需要注意的是,索引不是万能的,不适当的索引会带来额外的性能开销和存储空间占用。在选择索引时需要考虑查询条件的选择性和频率、表的大小、数据的变化等因素,并进行测试和优化。 索引失效的场景有很多,比如使用函数、类型不匹配、数据类型转换等,需要了解各种场景并避免使用或优化查询语句。 索引覆盖可以减少一次回表,即通过覆盖索引就能够得到需要的结果,而无需再访问数据行。这可以通过选择合适的索引、使用SELECT子句限制查询字段等方式来实现。 2. 表层面: 遵守三大范式可以确保数据的完整性和一致性,减少数据冗余和错误,提高数据质量。不过在实际应用中,也需要根据业务需求和数据特点进行权衡和优化。 尽量不用外键可以提高插入和更新的效率,但也可能影响查询的效率和数据完整性。使用中间表可以减少冗余和复杂性,但也可能增加查询和维护的难度和开销。 3. 数据库层面: 将RR隔离级别换为RC隔离级别可以提高并发性能,因为RC隔离级别比RR隔离级别更容易产生幻读和不可重复读,但也需要注意控制事务的粒度和时效性,避免脏读和数据错误。 4. 业务层面: Redis缓存可以提高读取速度和减轻数据库的负载,但也需要考虑缓存的一致性和更新策略。使用业务解决并发问题可以避免锁和等待的开销和影响,但也需要考虑业务的复杂性和可维护性。在面对具体业务场景时,需要进行具体分析和优化。
点赞 回复 分享
发布于 2023-05-09 17:40 河南

相关推荐

老粉都知道小猪猪我很久没更新了,因为秋招非常非常不顺利,emo了三个月了,接下来说一下我的情况吧本人是双非本 专业是完全不着计算机边的非科班,比较有优势的是有两段大厂实习,美团和字节。秋招面了50+场泡池子泡死的:滴滴 快手 去哪儿 小鹏汽车 不知名的一两个小厂其中字节13场 两次3面挂 两次2面挂 一次一面挂其中有2场面试题没写出来,其他的都是全a,但该挂还是挂,第三次三面才面进去字节,秋招加暑期总共面了22次字节,在字节的面评可以出成书了快手面了8场,2次实习的,通过了但没去,一次2面挂 最后一次到录用评估 至今无消息滴滴三面完 没几天挂了 所有技术面找不出2个问题是我回答不上来的,三面还来说我去过字节,应该不会考虑滴滴吧,直接给我干傻了去哪儿一天速通 至今无消息小鹏汽车hr 至今无消息美团2面挂 然后不捞我了,三个志愿全部结束,估计被卡学历了虾皮二面挂 这个是我菜,面试官太牛逼了拼多多二面挂 3道题也全写了 也没问题是回答不出来的 泡一周后挂腾讯面了5次 一次2面挂 三次一面挂,我宣布腾讯是世界上最难进的互联网公司然后还有一些零零散散的中小厂,但是数量比较少,约面大多数都是大厂。整体的战况非常惨烈,面试机会少,就算面过了也需要和各路神仙横向对比,很多次我都是那个被比下去的人,不过这也正常,毕竟谁会放着一个985的硕士不招,反而去招一个双非读化学的小子感觉现在互联网对学历的要求越来越高了,不仅仅要985还要硕士了,双非几乎没啥生存空间了,我感觉未来几年双非想要进大厂开发的难度应该直线上升了,唯一的打法还是从大二刷实习,然后苟个转正,不然要是去秋招大概率是炮灰。而且就我面字节这么多次,已经开始问很多ai的东西了,你一破本科生要是没实习没科研懂什么ai啊,纯纯白给了
不知名牛友_:爸爸
秋招你被哪家公司挂了?
点赞 评论 收藏
分享
评论
8
44
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务