一、问:如果有一张表,里面有个字段为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一问一答的更多相关文章

  1. mysql快问快答

    1.查看mysql版本 select version(); show variables like 'version'; 2.mysql 可以按timestamp排序吗? 可以 3.怎么查询商户下是否 ...

  2. mysql你问我答

    1.尊敬的先生,请您谈谈mysql数据库的引擎 数据库中的表设定了什么存储引擎,那么该表在数据存储方式.数据更新方式.数据查询性能以及是否支持索引等方面就会有不同的“效果”. mysql引擎大致分两类 ...

  3. OpenGL快问快答

    OpenGL快问快答 本文内容主要来自对(http://www.opengl.org/wiki/FAQ)的翻译,随机加入了本人的观点.与原文相比,章节未必完整,含义未必雷同,顺序未必一致.仅供参考. ...

  4. Oracle百问百答(四)

    Oracle百问百答(四) 31.怎样查看某用户下的表? select table_name from all_tables where owner=upper('jhemr'); 32.怎样查看某用 ...

  5. Oracle百问百答(二)

    Oracle百问百答(二) 11. nvl函数有什么用? NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值,否则 ...

  6. Oracle百问百答(一)

    Oracle百问百答(一) 01.如何查看oracle的版本信息? 02.如何查看系统被锁的事务信息? 03.怎么获取有哪些用户在使用数据库? 04. 数据表中的字段最大数是多少? 表或视图中的最大列 ...

  7. 微信小程序参数二维码6问6答

    微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...

  8. k3 Bos开发百问百答

              K/3 BOS开发百问百答   (版本:V1.1)           K3产品市场部       目录 一.基础资料篇__ 1 [摘要]bos基础资料的显示问题_ 1 [摘要]单 ...

  9. Java 面试题问与答:编译时与运行时

    Java 面试题问与答:编译时与运行时 2012/12/17 | 分类: 基础技术, 职业生涯 | 5 条评论 | 标签: RUNTIME, 面试 分享到:58 本文作者: ImportNew - 朱 ...

随机推荐

  1. windows文件共享 防火墙规则设置

    防火墙入站规则.完成以下两项设置即可. 设置一 操作:允许连接协议类型:UDP本地端口:137, 138远程端口:所有端口 设置二 操作:允许连接协议类型:TCP本地端口:139, 445远程端口:所 ...

  2. 通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态。

    通信对象 System.ServiceModel.Channels.ServiceChannel 无法用于通信,因为其处于“出错”状态. 在 System.ServiceModel.Channels. ...

  3. plsql auto 常用语法

    s=SELECTf=FROMsf=SELECT * FROMw=WHEREo=ORDER BYdF=DELETE FROMsc=SELECT COUNT(1) FROMff=FOR UPDATEl=L ...

  4. Jenkins-Pipeline 流水线发布

    基于docker部署 1.部署jenkins $ yum -y install java $ java -version openjdk version "1.8.0_181" O ...

  5. C# 编码规范、命名规则

    1  规范目的 ……………………………………………………… 3 2  适用范围 ……………………………………………………… 3 3  代码注释 ……………………………………………………… 3 3.1  ...

  6. CCNA学习与实验指南——第3章 以太网

    以太网就是局域网,IEEE制定了802.2和802.3两种标准.802.2规定了OSI模型的数据链路层的上半部分(LLC子层),802.3规定了OSI模型的数据链路层的下半部分和物理层(MAC子层). ...

  7. 鸟哥的Linux私房菜——第十三章:Vim编译器

    视频链接: 土豆: B站:http://www.bilibili.com/video/av9891085/ 本章的细节还是挺多的,可是我懒啊~~

  8. oracle 工作笔记,不定期更新

    此博客为工作时,所见技术问题的解决方案笔记,欢迎大家转载,转载请注明出处,谢谢~ 更新时间: 2017-07-12 1. clob字段值读取时,借用extractvalue或extract函数读取节点 ...

  9. c#的事件用法——实现下载时发生的事件

    //下载时发出的事件 using System; using System.Collections.Generic; using System.Linq; using System.Text; usi ...

  10. 流媒体技术学习笔记之(十)HLS协议直播延时优化(35s到10S)

    1.首先要了解HLS延时的机制,也就是为什么会延时,延时主要发生在什么地方. HTTP Live Streaming 并不是一个真正实时的流媒体系统,这是因为对应于媒体分段的大小和持续时间有一定潜在的 ...