1 / 3
文档名称:

常见MySQL面试题(1)(MySQL面试笔试题).pdf

格式:pdf   大小:183KB   页数:3页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

常见MySQL面试题(1)(MySQL面试笔试题).pdf

上传人:闰土 2023/3/8 文件大小:183 KB

下载得到文件列表

常见MySQL面试题(1)(MySQL面试笔试题).pdf

文档介绍

文档介绍:该【常见MySQL面试题(1)(MySQL面试笔试题) 】是由【闰土】上传分享,文档一共【3】页,该文档可以免费在线阅读,需要了解更多关于【常见MySQL面试题(1)(MySQL面试笔试题) 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。常见MySQL⾯试题(1)(MySQL⾯试笔试题)
⽂章⽬录
⽅法
尽量避免使⽤select*,查询具体到字段
设计数据表合理,减少连表查询
建⽴合理的索引
数据库的读写分离
使⽤redis缓存来减轻数据库的查询压⼒
⽤有⼤量数据,主要给⽤户查询,更新操作⽐较少,那么存储引擎⽤MyISAM好还是
InnoDB好,为什么?
使⽤MyISAM,因为MyISAM拥有较⾼的插⼊、查询速度。
存储结构:MyISAM在磁盘上存储成三个⽂件。⽽InnoDB所有的表都保存在同⼀个数据⽂件中,⼀般为2GB
事务⽀持:MyISAM不提供事务⽀持。InnoDB提供事务⽀持事务。
表锁差异:MyISAM只⽀持表级锁。InnoDB⽀持事务和⾏级锁。
全⽂索引:MyISAM⽀持FULLTEXT类型的全⽂索引(不适⽤中⽂,所以要⽤sphinx全⽂索引引擎)。InnoDB不⽀持。
表的具体⾏数:MyISAM保存有表的总⾏数,查询count(*)很快。InnoDB没有保存表的总⾏数,需要重新计算。
⽆限级的分类表结构,表个数不限(表字段名和说明就⾏,不需要脚本)
id、pid、name、orders、create_time、update_time
,字段USER_ID,USER_NAME,BIRTHDAY
USER_ID(int10)USER_NAME(varchar100)BIRTHDAY(varchar100)
1Name0110September1980
2Name011988-02-09
3Name031112564781
4Name042/3/1983

SELECT*FROMuserORDERBYuser_idDESCLIMIT2;
⼀条数据
SELECT*FROMuserORDERBYRAND()LIMIT1;
SELECT*FROMuserASt1JOIN(SELECTROUND(RAND()*((SELECTMAX(user_id)FROMuser)-(SELECT
MIN(user_id)FROMuser))+(SELECTMIN(user_id)FROMuser))ASuser_id)>=
;
SELECT*FROMuserWHEREuser_id>=((SELECTMAX(user_id)FROMuser)-(SELECTMIN(user_id)FROMuser))*
RAND()+(SELECTMIN(user_id)FROMuser)LIMIT1

SELECTDISTINCTuser_nameFROM`user`;
(去重关键字distinct。需要注意的是此关键字必须紧挨着select关键字。)
⼤于1983-01-01
答案(不全):
SELECT*FROM`user`WHERE(birthdayLIKE'%-%-%'ANDSTR_TO_DATE(birthday,'%Y-%m-%d')>'1983-01-01')OR
(birthdayLIKE'%/%/%'ANDSTR_TO_DATE(birthday,'%d/%m/%Y')>'1983-01-01');
5.⼀张采⽤Innodb的User表,其中id为主键,name为普通索引,试从索引的数据结构⾓
度分析,以下两条语句(均返回⼀条记录)在检索过程中有哪些区别?
Sql1:SELECTid,name,addressFROMUserWHEREname
"smith’
Sql2:SELECTid,name,addressFROMUserWHEREid=1;
sql2性能更⾼。
因为name为普通索引,即辅助索引,由于Innodb中辅助索引的数据存储的是聚簇索引的值,因此使⽤辅助索引进⾏查询时,当查到数据
后,还需要再使⽤主键查询⼀次聚簇索引,因此会查询两次索引,⽽sql2只需要查询⼀次。
⼀统计⽹站独⽴访客的需求,流量百万以上,如以IP为标识,可以查看当天实时或者
指定某天的IP数(需要去重),才⽤MySQL来实现,那么:
?(⽂字、sql均可,⽅案尽可能⾼效)
IP地址转换为整形存储,按⽇期分表,以(IP,⽇期)作为联合索引。
⼊库,当天实时和某天数据该如何查询?(写出sql语句)
redis队列缓存->MySQL批量⼊库
查询当天:
selectcount(distinctip)asip_numfromlog_{yyyymmdd}whereTO_DAYS(add_time)=TO_DAYS(now());
查询某天:
selectcount(distinctip)asip_numfromvisit_log_{yyyymmdd}whereTO_DAYS(add_time)={yyyy-mm-dd};
⾏顺序
mysql执⾏sql的顺序从From开始,以下是执⾏的顺序流程
⽣笛卡尔积,⽣成Temp1
,再确定关联条件
=⽣中间表Temp2
⽣的结果进⾏过滤产⽣中间表Temp3
⾏分组,产⽣中间表Temp4
⾏聚合产⽣中间表Temp5
⾏列筛选,产⽣中间表Temp6
⾏去重,产⽣中间表Temp7
⾏排序,产⽣中间表Temp8
⾏分页,产⽣中间表Temp9