首页 » 网站建设 » php5ado技巧_SQL优化面试专题

php5ado技巧_SQL优化面试专题

访客 2024-12-10 0

扫一扫用手机浏览

文章目录 [+]

SQL性能优化是一项艰巨的任务,并且是处理Web运用程序日益增加的负载的关键。

因此,我们有选择地选择了SQL性能优化方面的口试问题,这些问题可以使您充分理解SQL性能优化观点。

php5ado技巧_SQL优化面试专题

MySQL 基本是每个后台口试者必问的问题,而SQL优化又是MySQL中重之又重的一块了。
如果你的SQL优化回答的好,有条理,那你入取的概率就大大提升了。

php5ado技巧_SQL优化面试专题
(图片来自网络侵删)
问:比如,现在有个口试官说,现在线上有个SQL实行很慢,你怎么优化?

这种时候最好分几步回答,不要一上来就说,该怎么怎么写SQL,口试时要学会,跳出来,看全貌,装进去,看实质。

问:慢 SQL 语句的几种常见诱因?

在这个时候,就可以说,口试官,您好,我以为SQL慢涌现的缘故原由可以分为以下几种,牢记,不要回答自己模糊不清的,没法自作掩饰的纵然知道你也别回答,不然便是给自己挖坑。


无索引、索引失落效导致慢查询如果表很大,而对where或者order by 后面字段没有建立索引,那这种情形查起来肯定很费力。
但是有时候建立了索引,但在一些特定的场景下,索引还有可能会失落效,以是索引失落效也是导致慢查询的紧张缘故原由之一。
失落效场景很多,比如模糊查询白分号在前、查询的字段利用了函数或者做了打算操作都有可能导致索引失落效。
锁等待InnoDB 存储引擎支持行锁和表锁,我们要把稳行锁升级为表锁的可能。
在批量更新操作时,行锁就很可能会升级为表锁。
MySQL 认为如果对一张表利用大量行锁,会导致事务实行效率低落,从而可能造成其它事务永劫光锁等待和更多的锁冲突问题发生,致使性能严重低落,以是 MySQL 会将行锁升级为表锁。
还有,行锁是基于索引加的锁,如果我们在更新操作时,条件索引失落效,那么行锁也会升级为表锁。
除了锁升级之外,行锁相对表锁来说,虽然粒度更细,并发能力提升了,但也带来了新的问题,那便是去世锁。
不恰当的 SQL 语句利用不恰当的 SQL 语句也是慢 SQL 最常见的诱因之一。
例如,习气利用 <SELECT >,<SELECT COUNT()> SQL 语句,在大数据表中利用 <LIMIT M,N> 分页查询,以及对非索引字段进行排序等等。
对付一些慢的SQL,我该怎么剖析?

上面我说了一些关于SQL实行慢的缘故原由,下面就该看看怎么剖析这些SQL了

找出慢SQL开启慢查询,慢查询是剖析SQL实行慢的常见手段,紧张有这几个参数,slow_query_log:慢查询开启状态,slow_query_log_file:慢查询日志存放的位置(这个目录须要MySQL的运行帐号的可写权限,一样平常设置为MySQL的数据存放目录),long_query_time:查询超过多少秒才记录。
通过 EXPLAIN 剖析 SQL 实行操持通过 Show Profile 剖析 SQL 实行性能问:平时写SQL时该把稳什么?有什么履历可谈?

到这里,如果口试官还在听你回答,这时候,你可以适当提高一点语气,说对付一些慢SQL,有很大一部分是由于我们开拓者写SQL时不把稳SQL优化导致的,那么我就说一下我知道的一些把稳事变。


(提高声音分贝,以防口试官睡着,并敲重点,见告口试官,我准备装逼了,哈哈哈。


统计时只管即便利用count(),count()≈count(1),大于count(主键)。
如果明确查找一条语句,请利用limit 1;,由于找到一条符合条件的记录后就不会连续查找了。
优化分页查询避免 Select 用到什么字段就详细写什么字段,缘故原由除了 select 查询所有字段会多出网络传输开销之外,还有更主要的一点是,select 无法利用覆盖索引。
只管即便利用 MySQL 5.6往后的版本对付利用索引方面对索引字段做函数操作或者做运算操作,都不能利用上索引。
以是针对这一点,除了我们索引的字段不要加函数之外。
还要把稳一些隐式转换,比如,交易日志表(tradelog),tradeid 的字段类型是 varchar(32),字段有索引,但是当你实行 select from tradelog where tradeid=110717;语句,你创造走的还是全索引扫描。
这是由于它实在做了类型转换,相称于这么实行mysql> select from tradelog where CAST(tradid AS signed int) = 110717;。
隐式字符编码转换如果两张表利用的编码集不一致,比如一个是utf8mb4,一个是utf8,那么这两个字段连接后,相称于做了一次CONVERT(traideid USING utf8mb4),这样也用不了索引。
实在字符集不同只是条件之一,连接过程中哀求在被驱动表的索引字段上加函数操作,是直接导致对被驱动表做全表扫描的缘故原由。
问:1. 什么是SQL查询优化?

答: 查询优化是一种以某种办法编写查询以便可以快速实行的过程。
对付任何标准运用而言,这都是主要的一步。

问:有哪些技巧可以提高SQL查询的性能?

答: 优化SQL查询可以对性​能带来本色性的积极影响。
它还取决于您所拥有的RDBMS知识水平。
现在让我们看一下调度SQL查询的一些技巧。

1.只管即便不要编写冗长的查询,利用视图和存储过程,它有助于最大程度地减少网络负载。

2.最好引入约束而不是触发器。
它们比触发器更有效,并且可以提高性能。

3.利用表级变量而不是临时表。

4. UNION ALL子句的相应速率比UNION快。
它不会查找重复的行,而UNION语句会查找重复的行,无论它们是否存在。

5.防止利用DISTINCT和HAVING子句。

6.避免过多利用SQL游标。

7.构建存储过程时,请利用SET NOCOUNT ON子句。
它表示受T-SQL语句影响的行。
这将导致网络流量减少。

8.优秀作法是返回所需的列而不是表的所有列。

9.最好不要利用繁芜的Join,并避免不当地利用触发器。

10.创建表索引并遵守标准

问:有哪些影响数据库性能的瓶颈?

答: 在Web运用程序中,数据库层可能被证明是实现末了一英里可扩展性的关键瓶颈。
如果数据库存在性能泄露,则可能成为瓶颈,并可能导致问题。
一些常见的性能问题如下。

1. CPU利用率非常是最明显的性能瓶颈。
但是,您可以通过扩容CPU或更换为高等CPU来修复它。
它可能看起来像是一个大略的问题,但非常的CPU利用率可能导致其他问题。

2.内存不敷是下一个最常见的瓶颈。
如果做事器无法管理峰值负载,那么它将对性能造成很大的问号。
对付任何运用程序来说,实行内存都是至关主要的,由于它比持久性内存要快。
同样,当RAM低落到特定阈值时,操作系统将转向利用交流内存。
但这会使运用程序运行非常缓慢。

您可以通过扩容RAM来办理它,但是如果有内存泄露,它将无法办理。
在这种情形下,您须要剖析运用程序,以识别其代码中的潜在泄露。

3.对外部存储设备(如SATA磁盘)的过度依赖也可能成为瓶颈。
在将大量数据写入磁盘时,其影响显而易见。
如果输出操作非常慢,则很明显表明问题已成为瓶颈。

在这种情形下,您须要进行扩容,用更快的驱动器更换现有驱动器。
考试测验升级到SSD硬盘驱动器或类似产品。

问:改进SQL性能涉及哪些步骤?

答:

创造–首先,找出须要改进的地方。
探索诸如探查器,查询实行操持,SQL调优顾问,动态视图和自定义存储过程之类的工具。
审核–集中谈论可用数据以隔离紧张问题。
发起–这是一种可以提高性能的标准方法。
但是,您可以对其进行进一步自定义以最大程度地受益。

1.识别字段并创建索引。
2.修正大型查询以利用创建的索引。
3.刷新表和视图并更新统计信息。
4.重置现有索引并删除未利用的索引。
5.查找并打消去世块。

验证–测试SQL性能调度方法。
定期监视进度。
其余,跟踪是否对运用程序的其他部分有不利影响。
发布–现在,是时候与团队中的每个人共享事情办理方案了。
让他们知道所有最佳做法,以便他们可以轻松利用它。
问:什么是实行操持(explain plan)?

答: 这是SQL中利用的术语,它显示其优化程序操持用于实行SELECT / UPDATE / INSERT / DELETE语句的实行操持。

问:您如何剖析实行操持?

答: 在剖析解释操持时,请检讨以下区域。

1.驱动表2.联接顺序3.联接手法4.意外的笛卡尔积5.嵌套循环,合并排序和哈希联接6.全表扫描7.未利用的索引8.访问路径

问:您如何利用实行操持调度查询?

答: 解释操持显示查询本钱的完全输出,包括每个子查询。
本钱与查询实行韶光成正比。
该操持还在从查询中获取数据的同时在查询或子查询中描述了问题。

问:什么是Summary advisor,它供应什么类型的信息?

答: Summary advisor是用于过滤和实例化视图的工具。
通过为给定的事情负载选择适当的实例化视图集,它可以帮助提高SQL性能。
它还供应有关实例化视图建议的数据。

问:是什么最有可能导致SQL查询运行慢至5分钟?

答: 很有可能,特定表中数据量的溘然增加可能会减慢SQL查询的输出。
因此,网络目标表的必要统计信息。
其余,监视数据库级别或根本工具级别的任何变动。

问:什么是Latch Free Event?何时发生?系统如何处理?

答: 在Oracle中,当会话须要锁,试图获取它但由于其他人拥有它而失落败时,就会发生“Latch Free Event”等待事宜。

因此,它等待着等待,等待锁开释,然后醒来并再次尝,试锁上没有等待做事员的有序行列步队,因此最先到达的人可以得到它。

问:什么是主动调度和被动调度?

答:

主动调度–架构师或DBA确定在设计和开拓过程中哪些系统资源和可用的Oracle功能组合知足标准。

反应式调度–这是创造和肃清瓶颈的自下而上的方法。
目的是使Oracle相应更快。

问: 什么是基于规则的优化器和基于本钱的优化器?

答: Oracle确定如何获取处理有效SQL语句所需的数据。
它利用以下两种方法之一来做出此决定。

基于规则的优化器–如果做事器没有内部统计信息支持该语句引用的工具,则RBO方法将得到优先级。
但是,Oracle将在往后的版本中弃用此方法。

基于本钱的优化器–内部统计数据很多时,CBO将得到优先权。
它验证几种可能的实行操持,并根据系统资源选择本钱最低的操持。

问: Oracle中有哪些SQL性能调优增强功能?

答: Oracle供应了许多性能增强功能,个中包括:

1.自动性能诊断和调优功能2.自动共享内存管理–它使Oracle可以掌握SGA中的内存分配。
3.等待模型的改进–已经有了许多视图来增强等待模型。
4.自动优化器统计信息网络–利用称为GATHER_STATS_JOB的操持作业网络优化器统计信息。
5.动态采样–使做事器能够增强性能。
6. CPU Costing –这是优化器(CPU + I / O)的基本本钱模型,其本钱单位为韶光优化器关照的韶光。
7.基于规则的优化器过期-不再利用。
8.跟踪增强功能–端到端跟踪,该跟踪许可通过客户端标识符而不是利用范例的会话ID来识别客户端进程。

1、Mysql 查询是否区分大小写?

不区分SELECT VERSION(), CURRENT_DATE;SeLect version(), current_date;seleCt vErSiOn(), current_DATE;所有这些例子都是一样的,Mysql 不区分大小写。

2、Mysql 的技能特点是什么?

Mysql 数据库软件是一个客户端或做事器系统,个中包括:支持各种客户端程序和库的多线程 SQL 做事器、不同的后端、广泛的运用程序编程接口和管理工具。

3、Heap 表是什么?

HEAP 表存在于内存中,用于临时高速存储。
BLOB 或 TEXT 字段是不许可的只能利用比较运算符=,<,>,=>,= <HEAP 表不支持 AUTO_INCREMENT索引不可为 NULL

4、Mysql 做事器默认端口是什么?

Mysql 做事器的默认端口是 3306。

5、与 Oracle 比较,Mysql 有什么上风?

Mysql 是开源软件,随时可用,无需付费。
Mysql 是便携式的带有命令提示符的 GUI。
利用 Mysql 查询浏览器支持管理

6、如何区分 FLOAT 和 DOUBLE?

以下是 FLOAT 和 DOUBLE 的差异:浮点数以 8 位精度存储在 FLOAT 中,并且有四个字节。
浮点数存储在 DOUBLE 中,精度为 18 位,有八个字节。

7、区分 CHAR_LENGTH 和 LENGTH?

CHAR_LENGTH 是字符数,而 LENGTH 是字节数。
Latin 字符的这两个数据是相同的,但是对付 Unicode 和其他编码,它们是不同的。

8、请简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的差异?

SQL 标准定义的四个隔离级别为:read uncommited :读到未提交数据read committed:脏读,不可重复读repeatable read:可重读serializable :串行事物

9、在 Mysql 中 ENUM 的用法是什么?

ENUM 是一个字符串工具,用于指定一组预定义的值,并可在创建表时利用。
Create table size(name ENUM('Smail,‘Medium’,‘Large’);

10、如何定义 REGEXP?

REGEXP 是模式匹配,个中匹配模式在搜索值的任何位置。

11、CHAR 和 VARCHAR 的差异?

以下是 CHAR 和 VARCHAR 的差异:CHAR 和 VARCHAR 类型在存储和检索方面有所不同CHAR 列长度固定为创建表时声明的长度,长度值范围是 1 到 255当 CHAR 值被存储时,它们被用空格添补到特定长度,检索 CHAR 值时需删除尾随空格。

12、列的字符串类型可以是什么?

字符串类型是:

SETBLOBENUMCHARTEXTVARCHAR

13、如何获取当前的 Mysql 版本?

SELECT VERSION();用于获取当前 Mysql 的版本。

14、Mysql 中利用什么存储引擎?

存储引擎称为表类型,数据利用各种技能存储在文件中。

技能涉及:

Storage mechanismLocking levelsIndexingCapabilities and functions.

15、Mysql 驱动程序是什么?

以下是 Mysql 中可用的驱动程序:

PHP 驱动程序JDBC 驱动程序ODBC 驱动程序CWRAPPERPYTHON 驱动程序PERL 驱动程序RUBY 驱动程序CAP11PHP 驱动程序Ado.net5.mxj

16、TIMESTAMP 在 UPDATE CURRENT_TIMESTAMP 数据类型上做什么?

创建表时 TIMESTAMP 列用 Zero 更新。
只要表中的其他字段发生变动,UPDATECURRENT_TIMESTAMP 润色符就将韶光戳字段更新为当前韶光。

17、主键和候选键有什么差异?

表格的每一行都由主键唯一标识,一个表只有一个主键。
主键也是候选键。
按照老例,候选键可以被指定为主键,并且可以用于任何外键引用。

18、如何利用 Unix shell 登录 Mysql?

我们可以通过以下命令登录:

[mysql dir]/bin/mysql -h hostname -u

19、 myisamchk 是用来做什么的?

它用来压缩 MyISAM 表,这减少了磁盘或内存利用。

20、ISAM 是什么?

ISAM 简称为索引顺序访问方法。
它是由 IBM 开拓的,用于在磁带等赞助存储系统上存储和

检索数据。

21、如何掌握 HEAP 表的最大尺寸?

Heal 表的大小可通过称为 max_heap_table_size 的 Mysql 配置变量来掌握。

22、MyISAM Static 和 MyISAM Dynamic 有什么差异?

在 MyISAM Static 上的所有字段有固定宽度。
动态 MyISAM 表将具有像 TEXT,BLOB 等字

段,以适应不同长度的数据类型。
点击这里有一套最全阿里口试题总结。

MyISAM Static 在受损情形下更随意马虎规复。

23、federated 表是什么?

federated 表,许可访问位于其他做事器数据库上的表。

24、如果一个表有一列定义为 TIMESTAMP,将发生什么?

每当行被变动时,韶光戳字段将获取当前韶光戳。

25、列设置为 AUTO INCREMENT 时,如果在表中达到最大值,会发生什么情形?

它会停滞递增,任何进一步的插入都将产生缺点,由于密钥已被利用。

26、若何才能找出末了一次插入时分配了哪个自动增量?

LAST_INSERT_ID 将返回由 Auto_increment 分配的末了一个值,并且不须要指定表名称。

27、你怎么看到为表格定义的所有索引?

索引是通过以下办法为表格定义的:

SHOW INDEX FROM

28、MYSQL 数据表在什么情形下随意马虎破坏?

做事器溘然断电导致数据文件破坏。

逼迫关机,没有先关闭 mysql 做事等。

29、mysql 有关权限的表都有哪几个?

Mysql 做事器通过权限表来掌握用户对数据库的访问,权限表存放在 mysql 数据库里,由

mysql_install_db 脚本初始化。
这些权限表分别 user,db,table_priv,columns_priv 和

host。

30、Mysql 中有哪几种锁?

MyISAM 支持表锁,InnoDB 支持表锁和行锁,默认为行锁

表级锁:开销小,加锁快,不会涌现去世锁。
锁定粒度大,发生锁冲突的概率最高,并发量

最低

行级锁:开销大,加锁慢,会涌现去世锁。
锁力度小,发生锁冲突的概率小,并发度最高

感谢大家的阅读!
希望本文对大家有所帮助。
末了,有想学习本文源码条记以及更多java高等学习课程,口试资料的

学习更多JAVA知识与技巧,点击博主主页查看!

标签:

相关文章

phpsqlite记载总数技巧_SQLite批量INSERT

在SQLite数据库中进行大批量记录INSERT,有三种方法,三种方法的效率由高低,本文举例解释。方法一:逐条记录INSERT,这...

网站建设 2024-12-12 阅读0 评论0