MySQL
- 日常工作中怎么优化sql?
-
优化表结构
尽量使用数字型字段
若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。尽可能的使用 varchar 代替 char
变长字段存储空间小,可以节省存储空间。当索引列大量重复数据时,可以把索引删除掉
比如有一列是性别,几乎只有男、女、未知,这样的索引是无效的。 -
优化查询
应尽量避免在 where 子句中使用!=或<>操作符
应尽量避免在 where 子句中使用 or 来连接条件
任何查询也不要出现select *
避免在 where 子句中对字段进行 null 值判断
在 where 子句中对字段进行表达式操作、函数操作,会使引擎放弃使用索引而进行全表扫描
# 表达式操作导致索引失效
select id from a where num/2 = 100;
# 函数操作导致索引失效
select id from a where substring(name,1,3) = 'abc';
- 索引优化
对作为查询条件和 order by的字段建立索引
避免建立过多的索引,多使用组合索引
-
Hash 索引和 B+ 树索引区别是什么?
B+ 树可以进行范围查询,Hash 索引不能。
B+ 树支持联合索引的最左侧原则,Hash 索引不支持。
B+ 树支持 order by 排序,Hash 索引不支持。
Hash 索引在等值查询上比 B+ 树效率更高。
B+ 树使用 like 进行模糊查询的时候,like 后面(比如%开头)的话可以起到优化的作用,Hash 索引根本无法进行模糊查询。 -
数据库怎么分库分表?
Mybatis
-
Mybatis有哪些优缺点
多线程
-
产生死锁的条件,怎么避免死锁?
-
多线程怎么保证数据一致性?
Dubbo
- 聊一下dubbo和zookeeper?zookeeper是干嘛的?
微服务
- 和传统相比,微服务有什么优势?什么是微服务,你的理解?