MySQL一问一答
一、问:如果有一张表,里面有个字段为id的自增主键,当已经向表里面插入了10条数据之后,删除了id为8,9,10的数据,再把mysql重启,之后再插入一条数据,那么这条数据的id值应该是多少,是8,还是11?
答:如果表的类型为MyISAM,那么是11。如果表的类型为InnoDB,则id为8。 这是因为两种类型的存储引擎所存储的最大ID记录的方式不同,MyISAM表将最大的ID记录到了数据文件里,重启mysql自增主键的最大ID值也不会丢失; 而InnoDB则是把最大的ID值记录到了内存中,所以重启mysql或者对表进行了OPTIMIZE操作后,最大ID值将会丢失。
二、MySQL内存溢出和内存泄漏区别在哪?
答:内存溢出:内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
内存泄漏:内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光(如果free -m,看到内存use得比较多,cacahe比较少时,可能发生了内存泄漏了,这时需要重启下MySQL实例来释放内存)
三、change和modify都可以修改表的定义,那么它们有什么不同?
答:不同的是修改列时,change后面需要写两次列名,不方便;但change的优点是可以修改列名称,而modify则不能。
四、having和where都是对结果进行条件过滤的,那么两者区别在哪?
答:having和where的区别在于having是对聚合后的结果进行条件的过滤,而where是在聚合前就对记录进行过滤,如果逻辑允许,我们尽量用where先过滤记录,这样因为结果集减少,将对聚合的效率大大提高,最后再根据逻辑看是否用having进行再过滤。
五、当发现慢查询日志里有大量慢查询的记录,那我们优先处理出现频率最多的,还是耗时最多的呢?
答:我们应该优先处理慢查询出现频率比较高的sql语句,因为这些请求发生的次数是最频繁,意味着是紧急的;其次处理出现频率不高但耗时又比较长的慢查询,因为有些耗时比较长的慢查询,可能是偶发的情况,可能一周来一次或者一个月几次,这种情况还是可以接受的,不是紧急优先处理
六、当表的数据量大于1000万时,MySQL的性能会急剧下降吗?
答:不会,MySQL是数据库,不是文件,随着数据的增加,性能当然会有所下降,但是这些下降不是线性的,如果用户选择正常的存储引擎,以及正确的配置,再多的数据量MySQL也能承受。
七、通常情况下,hash索引可以一次定位,为啥还要用B+树索引?
答:1. hash索引查找数据基本上能一次定位数据,当然有大量碰撞的话性能也会下降。而btree索引就得在节点上挨着查找了,很明显在数据精确查找方面hash索引的效率是要高于btree的;
2. 那么不精确查找呢,也很明显,因为hash算法是基于等值计算的,所以对于“like”等范围查找hash索引无效,不支持;
3. 对于btree支持的联合索引的最优前缀,hash也是无法支持的,联合索引中的字段要么全用要么全不用。提起最优前缀居然都泛起迷糊了,看来有时候放空得太厉害;
4. hash不支持索引排序,索引值和计算出来的hash值大小并不一定一致。
八、表A有1000万条数据(有3列,其值完全一样,但分别为主键、唯一索引、非唯一索引),对比:1、通过主键随机取10万条数据;2、通过非唯一辅助索引随机取10万条数据;3、通过唯一辅助索引随机取10万条数据;
这3个行为,有区别吗?
答:第一和第三种情况的速度一样快,第二种情况的速度最慢,因为通过非唯一性辅助索引找到数据后,由于不确定性,还会往后多扫一会,所以查询速度最慢
九、二进制日志和重做日志都是记录事务的日志,那它们有什么区别?
答:二进制日志会记录所有与MySQL数据库有关的日志记录,包括InnoDB、MyISAM、Heap等其他存储引擎的日志。而InnoDB存储引擎的重做日志只是记录有关该引擎本身的事务日志。其次,记录的内容不同,无论用户将二进制日志文件记录的格式设为STATEMENT还是ROW,又或者MIXED,其记录的都是关于一个事务的具体操作内容,即该日志逻辑日志。而InnoDB存储引擎的重做日志文件记录的是关于每个页(Page)的更改的物理情况。
十、既然索引可以加快查询速度,那么是不是只要是查询语句需要,就建上索引?
答:答案是否定的,因为索引虽然加快了查询速度,但索引也是有代价的:索引文件本身要消耗存储空间,同时索引会加重插入、删除和修改记录时的负担,另外,MySQL在运行时也要消耗资源维护索引,因此索引并不是越多越好。
十一、创建约束不就是通常创建索引的方法吗?那约束和索引有什么区别?
答:的确,当用户创建一个唯一索引就是创建一个唯一约束。但是约束和索引的概念还是有所不同的,约束更是一个逻辑的概念,用来保证数据的完整性,而索引是一个数据结构,既有逻辑上的概念,在数据库中还代表着物理存储的方式。
十二、什么是同步I/O,什么是异步I/O?
答:同步文件I/O中,线程启动一个I/O操作后会立即进入等待状态,直到I/O操作完成才醒来继续执行。而异步文件I/O方式中,线程发送一个I/O请求到内核,然后继续处理其他的事情,内核完成I/O请求后,将会通知线程I/O操作完成了。简单地说,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到些I/O执行完毕。相反,异步I/O操作是在后台运行的,I/O操作和应用程序可以同时运行,这就提高了系统性能。
未完待续
作者:陆炫志 出处:xuanzhi的博客 http://www.cnblogs.com/xuanzhi201111 您的支持是对博主最大的鼓励,感谢您的认真阅读。本文版权归作者所有,欢迎转载,但请保留该声明。 |
MySQL一问一答的更多相关文章
- mysql快问快答
1.查看mysql版本 select version(); show variables like 'version'; 2.mysql 可以按timestamp排序吗? 可以 3.怎么查询商户下是否 ...
- mysql你问我答
1.尊敬的先生,请您谈谈mysql数据库的引擎 数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的“效果”. mysql引擎大致分两类 ...
- OpenGL快问快答
OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...
- Oracle百问百答(四)
Oracle百问百答(四) 31.怎样查看某用户下的表? select table_name from all_tables where owner=upper('jhemr'); 32.怎样查看某用 ...
- Oracle百问百答(二)
Oracle百问百答(二) 11. nvl函数有什么用? NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值,否则 ...
- Oracle百问百答(一)
Oracle百问百答(一) 01.如何查看oracle的版本信息? 02.如何查看系统被锁的事务信息? 03.怎么获取有哪些用户在使用数据库? 04. 数据表中的字段最大数是多少? 表或视图中的最大列 ...
- 微信小程序参数二维码6问6答
微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...
- k3 Bos开发百问百答
K/3 BOS开发百问百答 (版本:V1.1) K3产品市场部 目录 一.基础资料篇__ 1 [摘要]bos基础资料的显示问题_ 1 [摘要]单 ...
- Java 面试题问与答:编译时与运行时
Java 面试题问与答:编译时与运行时 2012/12/17 | 分类: 基础技术, 职业生涯 | 5 条评论 | 标签: RUNTIME, 面试 分享到:58 本文作者: ImportNew - 朱 ...
随机推荐
- 使用Java语言递归删除目录下面产生的临时文件
背景:项目copy的过程中,在项目的目录文件夹下面都产生了一个固定的文件,很是讨厌.手动删除的话比较费力,所以写了一个简单的Java程序去删除: public static void main(Str ...
- Linux命令行上传本地文件到服务器 、 下载服务器文件到本地
sh使用命令: scp 将本地文件上传至服务器 第一个是本地文件的路径/文件名, 例如 ./index.tar.gz . index.html . bg.png 等 第二个是要上传到的服务器的位置 ...
- BZOJ3434 WC2014时空穿梭(莫比乌斯反演)
考虑枚举相邻点距离差的比例.显然应使比例值gcd为1以保证不重复统计.确定比例之后,各维坐标的方案数就可以分开考虑.设比例之和为k,则若坐标上限为m,该维坐标取值方案数即为Σm-ki (i=1~⌊m/ ...
- 洛谷 P4284 [SHOI2014]概率充电器 解题报告
P4284 [SHOI2014]概率充电器 题目描述 著名的电子产品品牌SHOI 刚刚发布了引领世界潮流的下一代电子产品-- 概率充电器: "采用全新纳米级加工技术,实现元件与导线能否通电完 ...
- 关于 Java 中的 Null
什么是Java中的Null? null在Java中是一个非常重要的概念,它最初是为了表示缺少某些东西,例如缺少用户.资源或任何东西而发明出来的.但是这也为Java程序员带来了很多麻烦,比如最常见的空指 ...
- vmware:Could not open /dev/vmmon: No such file or directory.
Q: Could not open /dev/vmmon: No such file or directory. Please make sure that the kernel module `vm ...
- CentOS 7.4 java验证码乱码的问题
转载阿里云 摘要: 新服务器配置发布网站 配置后程序顺利启动在登录时发现验证码无法识别显示出了图片,但是字是乱码 初步估计应该是字体问题 ssh登录服务器查看默认字体 #fc-match msam1 ...
- es6 export 和 export default区别
相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...
- indeed招聘
https://cn.indeed.com/%E5%B7%A5%E4%BD%9C-%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD%E5%85%AC%E5%8F%B8-%E5% ...
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.