laravel mysql sum查询并排行_必看!PHP常见面试题——MySQL篇(二)
接上期:《必看!PHP常见面试题——MySQL篇(一)》
11.MySQL的默认事务隔离级别是?
读未提交(RU): 一个事务还没提交时, 它做的变更就能被别的事务看到.
读提交(RC): 一个事务提交之后, 它做的变更才会被其他事务看到.
可重复读(RR): 一个事务执行过程中看到的数据, 总是跟这个事务在启动时看到的数据是一致的. 当然在可重复读隔离级别下, 未提交变更对其他事务也是不可见的.
串行化(S): 对于同一行记录, 读写都会加锁. 当出现读写锁冲突的时候, 后访问的事务必须等前一个事务执行完成才能继续执行.
12.谈谈锁机制与InnoDB锁算法?
MyISAM和InnoDB存储引擎使用的锁:
MyISAM采用表级锁(table-level locking)。
InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁
表级锁和行级锁对比:
表级锁:MySQL中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。
行级锁:MySQL中锁定 粒度最小 的一种锁,只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。
13.Mysql 的存储引擎,myisam和innodb的区别?
InnoDB支持事务, MyISAM不支持.
InnoDB支持行级锁, MyISAM支持表级锁.
InnoDB支持多版本并发控制(MVVC), MyISAM不支持.
InnoDB支持外键, MyISAM不支持.
MyISAM支持全文索引, InnoDB不支持(但可以使用Sphinx插件)
MyISAM 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;不支持事务。适合小数据,小并发
Innodb 是支持事务的存储引擎;适合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发。
14.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
(1)设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
(2) 选择合适的表字段数据类型和存储引擎,适当的添加索引。
(3) 做mysql主从复制读写分离。
(4)对数据表进行分表,减少单表中的数据量提高查询速度。
(5)添加缓存机制,比如redis,memcached等。
(6)对不经常改动的页面,生成静态页面(比如做ob缓存)。
(7)书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
15.如何进行SQL优化?
(1)选择正确的存储引擎
MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。
(2)优化字段的数据类型 记住一个原则,越小的列会越快。如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理由使用 INT 来做主键,使用 MEDIUMINT, SMALLINT 或是更小的 TINYINT 会更经济一些。如果你不需要记录时间,使用 DATE 要比 DATETIME 好得多。当然,你也需要留够足够的扩展空间。
(3)为搜索字段添加索引 索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索,那么最好是为其建立索引,除非你要搜索的字段是大的文本字段,那应该建立全文索引。
(4)避免使用Select 从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。即使你要查询数据表的所有字段,也尽量不要用通配符,善用内置提供的字段排除定义也许能给带来更多的便利。
(5)使用 ENUM 而不是 VARCHAR ENUM 类型是非常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。例如,性别、民族、部门和状态之类的这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。
(6)尽可能的使用 NOT NULL 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。NULL其实需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。
(7)固定长度的表会更快 如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length”。例如,表中没有如下类型的字段:VARCHAR,TEXT,BLOB。只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了,这样,MySQL 引擎会用另一种方法来处理。
固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。并且,固定长度的表也更容易被缓存和重建。不过,唯一的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。
16.唯一索引比普通索引快吗, 为什么?
唯一索引不一定比普通索引快, 还可能慢.
查询时, 在未使用limit 1的情况下, 在匹配到一条数据后, 唯一索引即返回, 普通索引会继续匹配下一条数据, 发现不匹配后返回. 如此看来唯一索引少了一次匹配, 但实际上这个消耗微乎其微. 更新时, 这个情况就比较复杂了. 普通索引将记录放到change buffer中语句就执行完毕了。
而对唯一索引而言, 它必须要校验唯一性, 因此, 必须将数据页读入内存确定没有冲突, 然后才能继续操作. 对于写多读少的情况, 普通索引利用change buffer有效减少了对磁盘的访问次数, 因此普通索引性能要高于唯一索引.
17.MySQL由哪些部分组成, 分别用来做什么?
Server
连接器: 管理连接, 权限验证.
分析器: 词法分析, 语法分析.
优化器: 执行计划生成, 索引的选择.
执行器: 操作存储引擎, 返回执行结果.
存储引擎: 存储数据, 提供读写接口.
18.MySQL查询缓存有什么弊端, 应该什么情况下使用, 8.0版本对查询缓存有什么变更?
查询缓存可能会失效非常频繁, 对于一个表, 只要有更新, 该表的全部查询缓存都会被清空. 因此对于频繁更新的表来说, 查询缓存不一定能起到正面效果.
对于读远多于写的表可以考虑使用查询缓存.
8.0版本的查询缓存功能被删了。
19.MySQL怎么恢复半个月前的数据?
通过整库备份+binlog进行恢复. 前提是要有定期整库备份且保存了binlog日志.
20.做过哪些MySQL索引相关优化?
尽量使用主键查询: 聚簇索引上存储了全部数据, 相比普通索引查询, 减少了回表的消耗。MySQL5.6之后引入了索引下推优化, 通过适当的使用联合索引, 减少回表判断的消耗。
若频繁查询某一列数据, 可以考虑利用覆盖索引避免回表。联合索引将高频字段放在最左边。
以上就是程序员会在面试过程中碰到的问题,如果你经常参加面试的话,就会发现以上面试题很熟悉。所谓“知己知彼,百战不殆”,充实自身技能,才能顺利进面。我在经过三面、四面后几家公司终于等到了百度offer,下面我把更多的一些面试题分享给大家,整理的PDF目录如下:
说实话我并不是那种别人一看就很喜欢的工程师,因为一直在小公司做个小架构,所以适合我的职位范围相对来说很窄。
不过没关系,跳出舒适区看一下其他风景,我感觉对我来说也是一件好事。
我就是这条街最靓滴仔!!!
整理于网络,文中信息均搜集于网络,如有侵权,告知必删。
●php面试常问的题目(一)
●php面试常问的题目(二)
●91个常见的 Laravel 面试题和答案(一)
●91个常见的 Laravel 面试题和答案(二)
●完结篇:91 个常见的 Laravel 面试题和答案(三)
●44道Redis面试题,含参考答案!
●Docker 类面试题(常见问题)
●必看!PHP常见面试题——MySQL篇(一)
ENDPHP开源社区
扫描关注 进入”PHP资料“
免费获取进阶
面试、文档、视频资源
laravel mysql sum查询并排行_必看!PHP常见面试题——MySQL篇(二)相关推荐
- mysql子查询的方式_分布式系统中一种迭代处理MYSQL子查询的方法
1.技术背景 1.1 背景技术 在分布式mysql中间件系统,DML语句中,子查询需要可能涉及到多个数据分片,如果在DML语句使用子查询,需要首先解析出子查询的具体内容,然后根据路由把子查询发往到各个 ...
- php面试题 mysql 主从_必看!PHP常见面试题——MySQL篇
21.简要说一下数据库范式? 第一范式(1NF):强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项. 第二范式(2NF):要求实体的属性完全依赖于主关键字.所谓完全依赖是指不能存在仅依赖 ...
- php与mysql核心题目_必看!PHP常见面试题——MySQL篇(三)
21.简要说一下数据库范式? 第一范式(1NF):强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项. 第二范式(2NF):要求实体的属性完全依赖于主关键字.所谓完全依赖是指不能存在仅依赖 ...
- 深度学习试题_深度学习理论类常见面试题(二)
8.Attention 对比 RNN 和 CNN,分别有哪点你觉得的优势 对比 RNN 的是,RNN 是基于马尔可夫决策过程,决策链路太短,且单向 对比 CNN 的是,CNN 基于的是窗口式捕捉,没有 ...
- 数据库常见面试题(带答案,开发者必看)
数据库常见面试题(开发者篇) 什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够 ...
- MySQL子查询的优缺点_浅谈mysql的子查询
浅谈mysql的子查询 mysql的子查询的优化一直不是很友好,一直有受业界批评比较多,也是我在sql优化中遇到过最多的问题之一,你可以点击这里 ,这里来获得一些信息,mysql在处理子查询的时候,会 ...
- 一份完整的 MySQL 开发规范,进大厂必看!
一份完整的 MySQL 开发规范,进大厂必看! 作者:听风 https://www.cnblogs.com/huchong/p/10219318.html 一.数据库命令规范 1.所有数据库对象名称必 ...
- MySQL数据库常见面试题总结
1.数据库的常用范式: 第一范式(1NF):指表的列不可再分,数据库中表的每一列都是不可分割的基本数据项,同一列中不能有多个值: 第二范式(2NF):在 1NF 的基础上,还包含两部分的内容:一是表必 ...
- 面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波
转载自 面试被问Mysql没答上来?阿里P5:总结了55道常见面试题,收藏一波 正文开始前,分享阿里 P8 高级架构师吐血总结的 <Java 核心知识体系&面试资料.pdf>, ...
最新文章
- Spring - Java/J2EE Application Framework 应用框架 第 15 章 EJB的存取和实现
- 14.PTD与的基址
- PHP:验证邮箱合法性
- Windbg教程-调试非托管程序的基本命令中
- Https 加密原理分析
- hibernate连接泄露_泄漏抽象,或如何正确地与Hibernate绑定Oracle DATE
- C++(8)--数组及常用算法
- Spark基础学习笔记08:Scala简介与安装
- 每天Leetcode 刷题 初级算法篇-数学问题-计数质数
- AdvancedInstaller.com 命令行参数
- python写水仙花数
- 安卓分屏神器_平板机皇!华为MatePad Pro全面评测:这才是安卓生产力标杆
- vector实现 并交差 集实例
- ubuntu使用双模机械师K7机械键盘遇到的问题
- 三行代码做一辆Q弹物理自行车,骑上它去海边兜风吧!
- 微信群发提示频繁怎么办?
- 骁龙8gen2和骁龙8gen1差距大吗 骁龙8gen2比8gen1性能强多少
- 室外定位--GPS定位概述
- 加班的程序员:996 没有未来
- 你还在纠结器件丝印放错的烦恼么?