面试:做过sql优化吗?

news/2025/2/26 12:17:12

  近来面试找工作经常会遇见这种问题: 做过数据库优化吗?大数据量基础过吗?系统反应慢怎么查询?

  这咱也没背过啊,面试还老问,现在的网站主要的压力都来自于数据库,频繁的数据库访问经常会使系统瘫痪,这样就需要进行sql优化。明天去58面试,今天来梳理一下。

1. 写明查询具体某几列,减少*的使用,表名过长时,尽量使用表的别名

  *和列名一样

2,在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。

  in 和 exists的区别: 如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in, 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。其实我们区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询,所以我们会以驱动表的快速返回为目标,那么就会考虑到索引及结果集的关系了 ,另外IN时不对NULL进行处理。

  in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询。一直以来认为exists比in效率高的说法是不准确的。

3、模糊查询like,尽量少用%
  关键词%yue%,由于yue前面用到了“%”,因此该查询必然走全表扫描,除非必要,否则不要在关键词前加%,

4, 二者都能使用尽量使用where (与having比较)
  where 先过滤(数据就少了)再分组  
5,尽量使用多表连接(join)查询(避免子查询)

  子查询效率特别低,而一般的子查询都可以由关连查询来实现相同的功能,关联查询的效率要提高很多,所以建议在数据查询时避免使用子查询(尤其是在记录很多时),而最好用关联查询来实现。

6,建立索引

  较频繁地作为查询条件的字段,唯一性不太差的字段适合建立索引,更新不太频繁地字段适合创建索引,不会出现在where条件中的字段不该建立索引

7,多使用内部函数提高SQL效率

  例如多用concat连接,代替'||' 的符号连接

8,应尽量避免在 where 子句中使用 != 或 <> ,in 或 not in

  最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库 (不然会进行全表扫描,影响效率) 

9,尽可能的使用 varchar/nvarchar 代替 char/nchar (节省字段存储空间)

 


http://www.niftyadmin.cn/n/2067583.html

相关文章

python动态加载模块_python3使用exec来动态加载模块

xxglsvr.py import sys # locals() 函数来得到一个局部变量字典。 # 之后你就能从局部字典中获取修改过后的变量值了 def main(procName): loc locals() exec("from %s import call_sub" % procName) call_sub loc[‘call_sub‘] call_sub("private " p…

检测接口数据 - Charles使用

1.Charles下载地址 &#xff1a; 百度一下 2.使用方法 &#xff1a; http://blog.devtang.com/2015/11/14/charles-introduction/ 3.charles破解&#xff1a; Registered Name:https://zhile.ioLicense Key: 48891cf209c6d32bf4 破解步骤 董铂然的博客 - 详解https://www.cnblo…

oracle pue考试,oracle分布式事务(理论)

基本概念Local Coordinator&#xff1a;在分布事务中&#xff0c;必须参考其它节点上的数据才能完成自己这部分操作的站点。Global Coordinator&#xff1a;分布事务的发起者&#xff0c;负责协调这个分布事务。Commit Point Site&#xff1a;在分布事务中&#xff0c;首先执行…

python一般做什么项目好_你用 Python 做过什么有趣的数据挖掘/分析项目?

问题 学习了 Python&#xff0c; numpy&#xff0c; scipy 等&#xff0c; 想做一些数据方面的项目&#xff0c;但是之前又没有这方面的经验。所以想知道大家都做过什么有趣的项目&#xff0c; 或者有什么好入手的方向推荐下。&#xff08;注&#xff1a;本篇文章代码和网址较多…

for循环和数组练习

//公鸡2文&#xff0c;母鸡1文&#xff0c;小鸡半文&#xff0c;每种至少一只&#xff0c;100文买100只鸡有多少种可能var ci 0; for(var g1;g<50;g){for(var m1;m<100;m){for(var x1;x<100;x){if(g*2m*1x*(0.5)100&&gmx100){ci1;console.log("买公鸡&qu…

添加目录 linux,Linux添加库路径的两种方法

/opt/lib需要注意的是&#xff1a;第二种搜索路径的设置方式对于程序连接时的库(包括共享库和静态库)的定位已经足够了&#xff0c;但是对于使用了共享库的程序的执行还是不够的。这是因为为了加快程序执行时对共享库的定位速度&#xff0c;避免使用搜索路径查找共享库的低效率…

linux内核编译时引导程序里,Linux内核编译详细过程【新手入门】

1、准备源码最新的源码可以从kernel.org上获取&#xff0c;如当前最新版本为2.6.31&#xff1a;$ wget linux-kernel/v2.6/linux-2.6.31.tar.bz2">http://oss.ustc.edu.cn/linux-kernel/v2.6/linux-2.6.31.tar.bz22、解压源码$ tar xvf linux-2.6.31.tar.bz2 -C /usr/s…

完整html生日祝福代码_经典生日祝福语,精美生日贺卡生日快乐图片

宝贝&#xff0c;你的生日就在今天&#xff0c;祝你可爱依旧&#xff0c;快乐多多&#xff01;也许你并不是为我而生&#xff0c;可我却有幸与你相伴。愿我在有生之年&#xff0c;年年为你点燃生日的烛焰。一支蜡烛&#xff0c;一颗心愿&#xff0c;一份真情&#xff0c;祝你生…