MySQL最佳实践培训后测试——参考答案

desc~新浪小组内技术分享
题目链接:http://www.diaochapai.com/survey/b23e2785-35d9-48f6-8da5-ac3a155a6d94
答案: A A C A C   D C C E B    A B C C A   B B B A C    B C C C C   D B D A D

1、int(n), 这里的n只是指定显示宽度(注意和varchar(n)的区别),如果是zerofill,宽度不足的时候会补0。另外建表的时候,如果指定int为 unsigned, 执行desc tablename的时候发现类型为 int(10),如果没有指定则是 int(11), 烦请大家注意,具体细节google it

2、varchar类型长度可自动伸缩,varchar(n) 表示最大字符数不能超过n,如果超过非严格模式下会被截断,但是在严格模式下会直接报错

3、这道题如果做错了,那肯定没好好看高鹏发的那个pdf,varchar(n) 此处n是字符数,具体占多少个字节mysql会根据编码来确定

4、like 不一定会使索引失效,比如 like ”afasfas%”, 只要通配符没在开头位置就行

此题本来拟定的答案是A, 但是 mysql 5.6以后的版本InnoDB也支持全文索引了,所以此题没有正确选项,谢谢亮亮童鞋的指正!

5、具体情况大家看下hash索引的实现原理吧,它是不能避免扫表的

6、Innodb存储引擎默认是行级锁

7、支持事务的还有BDB, memory的数据是在内存里面,表结构文件是放在硬盘上的

8、C选项,其它都是瞎编的干扰项

9、Partial Level 是我瞎编的, Routine Level 的权限主要只有 EXECUTE 和 ALTER ROUTINE 两种,主要针对的对象是procedure 和 function 这两种对象,在授予 Routine Level 权限的时候,需要指定数据库和相关对象。

10、复合索引只有最左列被用到,索引才能生效

11、这个如果做错了,肯定也是没有好好看高鹏的pdf的,column是关键字,应当尽量避免。查询的时候可以加个小引号(esc下面那个) ·column· 就不会报错了

12、选 B,null会参与字段比较,并且不会被B树索引,另外null是需要占磁盘空间的

13、pdf里面有、培训时候也有讲

14、InnoDB是把表的主键最大值放到内存里面,所以MYSQL重启之后就会丢失。MyISAM是把表的主键最大值放到文件里面,所以MYSQL重启之后不会丢失

15、其实这题主要是表达 “不要在列上面进行计算” ,B项就违反了这点,会使索引失效,C是干扰项,把所有的内容先查出来再筛选,应该没人会这么做
16、不要在区分度很小的字段上建索引,例如 status, 性别…
17、B项描述不是太严谨,但是A、C、D肯定是没问题的
18、题目已经说了,确定只有一条记录,加limit 1 主要是当查到一条之后立即结束查询,而不是继续扫表,可提高效率。C项是干扰项,如果加个唯一索引,再来一个叫“徐欢欢”的员工,Ta的信息就无法录入了
19、MyISAM和Memory不支持事务,只能用 InnoDB
20、这个比较简单,不多说了

21、 这里涉及的东西比较多,可查这里 《 深入浅出mysql》 P52

22、整理碎片

23、A 和B肯定不对,D项,复合索引比分别建索引效率高,具体google吧

24、desc tablename 是看不到存储引擎的

25、type为ALL的时候表示在扫表,效率是最低的

26、Qcache_free_blocks 缓存中相邻内存块的个数。数目大说明可能有碎片。FLUSH QUERY CACHE 会对缓存中的碎片进行整理,从而得到一个空闲块。

27、InnoDB行锁实现分析,可看这里 http://www.penglixun.com/tech/database/innodb_next_key_locking.html

28、必要的时候是需要反范式的,比如这个博客 http://book.51cto.com/art/201304/391990.htm

29、master端是没有sql线程的

30、D是胡扯的,B选项 master-master 是很常见的,互为主从