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 - 朱 ...
随机推荐
- C、C ++的内存模型
http://blog.sina.com.cn/s/blog_af9acfc60101bbcy.html
- python自动化之PDF
###################################处理PDF和Word文档################################### ''' PDF和Word文档是二进 ...
- javaee, javaweb和javase的区别以及各自的知识体系
javaee, javaweb和javase的区别以及各自的知识体系 来源 https://blog.csdn.net/weixin_39297312/article/details/79454642 ...
- C++实用整数快速输入输出模板(C++)
随便写一点放在这里,以后想蛇皮卡常就很方便啦 蒟蒻太懒了,也就暂时不搞什么封namespace之类的操作了 程序结束时记得flush一下. #include<cstdio> #define ...
- BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图
链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...
- dp乱写3:环形区间dp(数字游戏)
状态: fmax[i,j]//表示前i个数分成j个部分的最大值 fmin[i,j]//表示前i个数分成j个部分的最小值 边界:fmax[i,1]:=(sum[i] mod 10+10) mod 10( ...
- sql server 小技巧(5) Sql server 获取指定字符后的所有字符 - 去掉指定字符前的所有字符
select top 10 SUBSTRING( sproductcode, CHARINDEX('-', SProductCode)+1, LEN(SProductCode)) from csmr ...
- 分库分表中间件sharding-jdbc的使用
数据分片产生的背景,可以查看https://shardingsphere.apache.org/document/current/cn/features/sharding/,包括了垂直拆分和水平拆分的 ...
- 解题:NOIP 2018 保卫王国
题面 最小支配集=全集-最大独立集 所以先把点权改成正无穷/负无穷来保证强制选/不选某个点到独立集里,然后变成了洛谷的动态DP模板 GTMDNOIP2018ZTY #include<stack& ...
- E. The Supersonic Rocket Codeforces Round #502 (in memory of Leopoldo Taravilse, Div. 1 + Div. 2)
http://codeforces.com/contest/1017/problem/E 凸包模板+kmp #include <cstdio> #include <cstdlib&g ...