求大神讲讲,关于数据库性能优化方法

Meizan_ 2017-11-21 09:56:42
小白一枚,最近在面试工作,问到关于数据库方面的问题,比如数据性能优化等等,不知道该怎么回答.
...全文
417 15 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
welcomejavas 2017-12-05
细节太多了,尽量用最优的方法,比如is not null 尽量用ISNULL;还有就是多表查询时,尽量inner,少用子查询,筛选更快,其次是索引,触发器等
  • 打赏
  • 举报
回复
Meizan_ 2017-12-02
引用 12 楼 xpresslink 的回复:
数据库优化和SQL查询优化是两个完全不同的问题好吧。 要做数据库优化要有比较强DBA的经验,而且还要配合应用的设计架构。 合理的设置参数,分配内存,设置表空间等对于性能影响是整体性的。 还有一些要涉及到操作系统和硬件方面,比如合理使用RAID,把临时表空间放到SSD上去等。 另外经验是一方面,大多数情况下调优是要做性能测试的。 有些优化措施是互损的,比如建索引,查询就会提升性能,但是每次update、delete、insert表的时候,都会维护相应的索引,性能就会下降。 行数小于300的表建索引性能反而低。 诸如此类的知识可以写一本书。 所以楼主还是找本数据库方面的书看看吧,这不是几句话就能说完的。 对于程序员来说可能更多的是 SQL查询优化。
感谢指点!
  • 打赏
  • 举报
回复
高 斯林 2017-12-02
万变不离其宗,独孤java的精髓就是以无表胜有表,少年自己体会去吧
  • 打赏
  • 举报
回复
混沌鳄鱼 2017-11-30
数据库优化和SQL查询优化是两个完全不同的问题好吧。 要做数据库优化要有比较强DBA的经验,而且还要配合应用的设计架构。 合理的设置参数,分配内存,设置表空间等对于性能影响是整体性的。 还有一些要涉及到操作系统和硬件方面,比如合理使用RAID,把临时表空间放到SSD上去等。 另外经验是一方面,大多数情况下调优是要做性能测试的。 有些优化措施是互损的,比如建索引,查询就会提升性能,但是每次update、delete、insert表的时候,都会维护相应的索引,性能就会下降。 行数小于300的表建索引性能反而低。 诸如此类的知识可以写一本书。 所以楼主还是找本数据库方面的书看看吧,这不是几句话就能说完的。 对于程序员来说可能更多的是 SQL查询优化。
  • 打赏
  • 举报
回复
简单说下我的认识。数据库开发,是指基于数据库的数据,根据业务定制上层应用,开发函数以及存储过程等;而数据库管理,多指DBA主要是管理数据库,包括数据库设计,数据存储管理,权限管理,日志管理,异常处理以及其他一些的日常维护。通常,二者相互帮助,共同设计维护一个利于开发,易于维护 ,存储合理的数据库!数据库管理是个繁杂的工作,需要时间和经验的积累沉淀!
  • 打赏
  • 举报
回复
super就是我 2017-11-30
使用开源数据库中间件MyCat来进行mysql的分片及读写分离来进行优化.
  • 打赏
  • 举报
回复
孤芳不自賞 2017-11-24
数据库优化的话,就需要考虑数据库的各种配置。使用哪种库类型,io流。
  • 打赏
  • 举报
回复
xy825459556 2017-11-24
1.尽量不要用between .. and ... ,使用 》= 和 《= , eg: select billdate from A where empid between 1 and 5; --> select billdate from A where empid >= 1 and empid <= 5; 2.尽量SQL不要用小写字母,都用大写字母 3.能用索引就用索引,其作用就相当于告诉数据库直接从哪里取数据就可以了,不用全部查找一遍 4.使用group by时,最后先把不用的数据排除掉,可以先在where 条件里面排除无关数据,在group by 5.in 和 not in ,换为 Exists 和 not Exists 6.当进行数据需要多表关联时,最好使用别名 7.复杂的SQL往往会消耗大量的资源,能用函数解决,就用函数 8.程序进行select 时,后面都要commit,这会释放占用的资源 9.也是最重要的,不要用 select * from 【表名】 ,用select 【列名】 from 【表名】 。除非不知道表字段时测试用。 以上是我的一些经验,纯当抛砖引玉了。
  • 打赏
  • 举报
回复
Meizan_ 2017-11-24
引用 5 楼 en_joker 的回复:
问你的是数据库优化还是sql优化?
数据库优化要怎么讲?
  • 打赏
  • 举报
回复
孤芳不自賞 2017-11-22
问你的是数据库优化还是sql优化?
  • 打赏
  • 举报
回复
Meizan_ 2017-11-22
引用 3 楼 Milogenius 的回复:
[quote=引用 2 楼 qq_40794696 的回复:] 1.尽量不要用between .. and ... ,使用 》= 和 《= , eg: select billdate from A where empid between 1 and 5; --> select billdate from A where empid >= 1 and empid <= 5; 2.尽量SQL不要用小写字母,都用大写字母 3.能用索引就用索引,其作用就相当于告诉数据库直接从哪里取数据就可以了,不用全部查找一遍 4.使用group by时,最后先把不用的数据排除掉,可以先在where 条件里面排除无关数据,在group by 5.in 和 not in ,换为 Exists 和 not Exists 6.当进行数据需要多表关联时,最好使用别名 7.复杂的SQL往往会消耗大量的资源,能用函数解决,就用函数 8.程序进行select 时,后面都要commit,这会释放占用的资源 9.也是最重要的,不要用 select * from 【表名】 ,用select 【列名】 from 【表名】 。除非不知道表字段时测试用。 以上是我的一些经验,纯当抛砖引玉了。
顶顶顶,我有一份当时面试的数据库资料,楼主需要吗?[/quote] 需要你给吧
  • 打赏
  • 举报
回复
Royal_lr 2017-11-22
首先你得知道sql执行计划,通过执行计划判断是通过全表还是索引查找数据,然后就是sql语句不用*等一些细节,分库分表操作
  • 打赏
  • 举报
回复
麦洛_ 2017-11-21
引用 2 楼 qq_40794696 的回复:
1.尽量不要用between .. and ... ,使用 》= 和 《= , eg: select billdate from A where empid between 1 and 5; --> select billdate from A where empid >= 1 and empid <= 5; 2.尽量SQL不要用小写字母,都用大写字母 3.能用索引就用索引,其作用就相当于告诉数据库直接从哪里取数据就可以了,不用全部查找一遍 4.使用group by时,最后先把不用的数据排除掉,可以先在where 条件里面排除无关数据,在group by 5.in 和 not in ,换为 Exists 和 not Exists 6.当进行数据需要多表关联时,最好使用别名 7.复杂的SQL往往会消耗大量的资源,能用函数解决,就用函数 8.程序进行select 时,后面都要commit,这会释放占用的资源 9.也是最重要的,不要用 select * from 【表名】 ,用select 【列名】 from 【表名】 。除非不知道表字段时测试用。 以上是我的一些经验,纯当抛砖引玉了。
顶顶顶,我有一份当时面试的数据库资料,楼主需要吗?
  • 打赏
  • 举报
回复
隐语者 2017-11-21
1.尽量不要用between .. and ... ,使用 》= 和 《= , eg: select billdate from A where empid between 1 and 5; --> select billdate from A where empid >= 1 and empid <= 5; 2.尽量SQL不要用小写字母,都用大写字母 3.能用索引就用索引,其作用就相当于告诉数据库直接从哪里取数据就可以了,不用全部查找一遍 4.使用group by时,最后先把不用的数据排除掉,可以先在where 条件里面排除无关数据,在group by 5.in 和 not in ,换为 Exists 和 not Exists 6.当进行数据需要多表关联时,最好使用别名 7.复杂的SQL往往会消耗大量的资源,能用函数解决,就用函数 8.程序进行select 时,后面都要commit,这会释放占用的资源 9.也是最重要的,不要用 select * from 【表名】 ,用select 【列名】 from 【表名】 。除非不知道表字段时测试用。 以上是我的一些经验,纯当抛砖引玉了。
  • 打赏
  • 举报
回复
李德胜1995 2017-11-21
百度谷歌。。。。。。。。
  • 打赏
  • 举报
回复
相关推荐
发帖
Java SE
加入

6.2w+

社区成员

Java 2 Standard Edition
社区管理员
  • Java SE
申请成为版主
帖子事件
创建了帖子
2017-11-21 09:56
社区公告
暂无公告