面试之SQL

1. 查询性能优化:从数据库查询数据时,你一定遇到过查询很慢的情况,请问你是怎么处理的。

答:

遇到的问题描述:是遇到过这种情况,我们给客户做过一款软件,日志库搜集了6000万条数据,显示、查询时候慢的要命。

查询慢的原因:通常情况下有几种情况可能导致,①硬件资源不足(不考虑);②数据量确实很大(不考虑);③并发量大,架构有问题;④数据表设计有问题;⑤查询语句存在性能问题。

可行的解决方案:

①:升级硬件资源,内存、存储、磁盘、CPU

②:数据量大分两种情况:

  • 表中数据多,这个是正常情况(处理的就是这种情况);
  • 查询出来的结果数据量大,这种情况可以分页加载或触发式加载或者加载一部分。

③:并发量大,如果是服务器经常处于高负荷状态,那就需要增加服务器,做负载均衡;如果数据库读写都很频繁,那么可以读写分离。

④:表设计有问题,没有创建索引,没有创建对索引。索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。创建索引是提高查询速度最有效的方式。创建索引应遵守一定的规则:

  • 在经常进行条件查询,但是没有指定为外键的列上建立索引,而不经常查询的字段则由优化器自动生成索引。
  • 在频繁用到排序、分组的字段上建立索引
  • 在相同值少的字段上建立索引
  • 不能创建索引过多,否则会对写数据造成影响

⑤:查询Sql语句写的有问题,这个是最常见的导致性能问题的原因,有以下几种情况:

  • 主查询或子查询中使用Select * 查询或查询过多冗余字段
  • 一个查询语句中,主查询和子查询语句中频繁使用排序或分组(Order By,Group By)
  • 语句写的不当,导致Sql放弃使用索引查询,包括:对null进行判断;使用!=或<>操作符;使用连接符or;使用in、not in;使用模糊查询like;
  • 联表查询时,有的数据被反复查询

所以我在对查询进行优化的时候,我首先重新检查表的索引是否创建的合理,然后根据以上的几点,检查查询语句是否存在可改进的地方,然后运行Profiler,进行查询跟踪优化。(尽量快速的描述)

时间: 2024-07-28 14:16:21

面试之SQL的相关文章

面试:sql如何提高效率

面试:提高SQL效率:1.关键字 varchar/nvarchar 代替 char/nchar, not in 或in改用 not exists union all的执行效率要比 union高 1.对于表格建立,关键常用字段建立索引,varchar/nvarchar 代替 char/nchar 2.分页查询,使用字句或者连接 join on 3.过滤多的条件放最前面4. 应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引 ,尽量少用子查询5. not in 或in改用

面试之SQL语句的优化方法

减少对数据库的查询次数 尽量使用相同的或非常类似的SQL语句进行查询 避免不带任何条件的SQL语句的执行 sql语句用大写 别名的使用(1.5倍)

面试问题 - SQL 中存储过程与函数的区别

SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临时表 存储过程 -> 可以返回多个变量. 存储过程的定义如下: 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量

【笔试/面试】SQL 经典面试题

基本概念 (1)any/all,构成 where 子句的条件判断,any:表示或(or)的概念,all:则表示与(and)的概念,这两个关键字的出现是为了语句的简化: (2)先分组再做聚合,逻辑上也应当如此,聚合(取最值)之后便无分组的必要: select region, sum(population), sum(area) from bbc group by region; 1 (3)group by having,having 对分组后的数据进行筛选,这是 where 所做不到的: 1. 不

面试常见问题-SQL

1.大数据并发的处理 大并发大数据量请求一般会分为几种情况: 1.大量的用户同时对系统的不同功能页面进行查找,更新操作 服务器层面的处理: 1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Settings Queue Length : 65535 2.  调整IIS 7的appConcurrentRequestLimit设置 由原来的默认5000改为100000. c:\windo

部分常见ORACLE面试题以及SQL注意事项

一.表的创建: 一个通过单列外键联系起父表和子表的简单例子如下: CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id) ) CREATE TABLE child(id INT, parent_id INT, INDEX par_ind (parent_id), FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE ) 建表时注意不要用关键字当表名或字段名,如insert

数据库基础(面试常见题)

一.数据库基础 1. 数据抽象:物理抽象.概念抽象.视图级抽象,内模式.模式.外模式 2. SQL语言包括数据定义.数据操纵(Data Manipulation),数据控制(Data Control) 数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等 数据操纵:Select ,insert,update,delete, 数据控制:grant,revoke 3. SQL常用命令: CREATE TABLE Student( I

关于面试总结6-SQL经典面试题

前言 用一条SQL 语句查询xuesheng表每门课都大于80 分的学生姓名,这个是面试考sql的一个非常经典的面试题 having和not in 查询 xuesheng表每门课都大于80 分的学生姓名 name kecheng score 张三 语文 81 张三 数学 73 李四 语文 86 李四 数学 90 王五 数学 89 王五 语文 88 王五 英语 96 解决办法一: having 如果不考虑学生的课程少录入情况(比如张三只有2个课程,王五有3个课程) SELECT name FROM

数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)

http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引(转载) 摘要: 很久没写blog,不是懒,实在是最近我这的访问速度不好,用firefox经常上传不了图片 .......今天无意发现了SQL Server 2008 Datetime Cast 成 Date 类型可以使用索引,分享一下:测试环境:USETEMPDBGOCREA