小白一枚,最近在面试工作,问到关于数据库方面的问题,比如数据性能优化等等,不知道该怎么回答.

解决方案 »

  1.   

    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 by5.in 和 not in ,换为 Exists 和 not Exists  6.当进行数据需要多表关联时,最好使用别名7.复杂的SQL往往会消耗大量的资源,能用函数解决,就用函数8.程序进行select 时,后面都要commit,这会释放占用的资源9.也是最重要的,不要用 select * from 【表名】 ,用select 【列名】 from 【表名】 。除非不知道表字段时测试用。以上是我的一些经验,纯当抛砖引玉了。
      

  2.   

    问你的是数据库优化还是sql优化?
      

  3.   

    首先你得知道sql执行计划,通过执行计划判断是通过全表还是索引查找数据,然后就是sql语句不用*等一些细节,分库分表操作
      

  4.   

    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 by5.in 和 not in ,换为 Exists 和 not Exists  6.当进行数据需要多表关联时,最好使用别名7.复杂的SQL往往会消耗大量的资源,能用函数解决,就用函数8.程序进行select 时,后面都要commit,这会释放占用的资源9.也是最重要的,不要用 select * from 【表名】 ,用select 【列名】 from 【表名】 。除非不知道表字段时测试用。以上是我的一些经验,纯当抛砖引玉了。
      

  5.   

    使用开源数据库中间件MyCat来进行mysql的分片及读写分离来进行优化.
      

  6.   

    简单说下我的认识。数据库开发,是指基于数据库的数据,根据业务定制上层应用,开发函数以及存储过程等;而数据库管理,多指DBA主要是管理数据库,包括数据库设计,数据存储管理,权限管理,日志管理,异常处理以及其他一些的日常维护。通常,二者相互帮助,共同设计维护一个利于开发,易于维护 ,存储合理的数据库!数据库管理是个繁杂的工作,需要时间和经验的积累沉淀!
      

  7.   

    数据库优化和SQL查询优化是两个完全不同的问题好吧。要做数据库优化要有比较强DBA的经验,而且还要配合应用的设计架构。
    合理的设置参数,分配内存,设置表空间等对于性能影响是整体性的。
    还有一些要涉及到操作系统和硬件方面,比如合理使用RAID,把临时表空间放到SSD上去等。
    另外经验是一方面,大多数情况下调优是要做性能测试的。有些优化措施是互损的,比如建索引,查询就会提升性能,但是每次update、delete、insert表的时候,都会维护相应的索引,性能就会下降。
    行数小于300的表建索引性能反而低。
    诸如此类的知识可以写一本书。所以楼主还是找本数据库方面的书看看吧,这不是几句话就能说完的。
    对于程序员来说可能更多的是 SQL查询优化。
      

  8.   

    万变不离其宗,独孤java的精髓就是以无表胜有表,少年自己体会去吧
      

  9.   

    细节太多了,尽量用最优的方法,比如is not null 尽量用ISNULL;还有就是多表查询时,尽量inner,少用子查询,筛选更快,其次是索引,触发器等