面试题专题:mysql(三)

142 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

摘要

本次分享面试题专题均为自己21届校招时通过牛客以及自己面试遇到的问题,答案均为自己理解整理,如果有错误,请麻烦评论指出,万分感谢,如对您有所帮助,请交出您的三连或者点赞也是爱♥

如何做 mysql 的性能优化?

  • 为搜索字段创建索引。
  • 避免使用 select *,列出需要查询的字段。
  • 垂直分割分表。
  • 选择正确的存储引擎。

如何避免 sql 注入?

  1. PreparedStatement(简单又有效的方法)
  2. 使用正则表达式过滤传入的参数
  3. 字符串过滤
  4. JSP中调用该函数检查是否包函非法字符
  5. JSP页面判断代码

mysql 有哪几种索引?

索引分类

1.普通索引index :加速查找

2.唯一索引

主键索引:primary key :加速查找+约束(不为空且唯一)

唯一索引:unique:加速查找+约束 (唯一)

3.联合索引

-primary key(id,name):联合主键索引

-unique(id,name):联合唯一索引

-index(id,name):联合普通索引

4.全文索引fulltext :用于搜索很长一篇文章的时候,效果最好。

5.聚集索引和非聚簇索引

6.覆盖索引:如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫 做覆盖索引。

mysql索引什么时候会失效?

1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)

注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引

2.对于多列索引,不是使用的第一部分,则不会使用索引

3.like查询是以%开头

4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引

5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引

mysql 的行锁和表锁?

MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

  • 表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。
  • 行级锁:开销大,加锁慢,会出现死锁。锁粒度小,发生锁冲突的概率小,并发度最高。