数据库面试题
1. 常见的索引有几种类型?
1) Full Text:全文索引 2) HASH:对于范围查询、排序和组合索引查询效率不高。 3) BTREE:MySQL默认的索引类型 4) RTREE:使用比较少。
2. MySQL的存储引擎有哪些?它们有什么区别?
1) 包括两种存储引擎:MyISAM和InnoDB 2) 是否支持事务:InnoDB支持事务,但是MyISAM不支持事务。 3) 关于锁:分为行级锁、表级锁和数据库锁。MyISAM支持表级锁(增、删、改的时候是排它锁,读取的时候是共享锁),不支持行级锁。InnoDB支持表级锁和行级锁。 4) 存储空间占用情况:MyISAM空间占用比InnoDB要小。 5) 查询速度:因为InnoDB用的是聚簇索引,查询速度比MyISAM快很多。
3.MySQL优化方式有哪些?
1)选取最适用的字段属性。 a. 如何知道字段长度是固定的,那就设为固定长度。 b. 尽量把字段设置为NOT NULL,因为执行查询的时候,会比较NULL值。 c.对于一些文本字段,能设成数值型的不要设为文本型。因为数值型的查询效率高于文本型。 2)使用连接(join)去代替子查询。 3)使用联合(UNION)来代替手动创建临时表。 UNION是去重,出掉结果集中重复的记录。 UNION ALL得到结果集中所有的记录,不去重。 4) 事务:维护数据库数据的完整性和一致性 银行转账情况: 用户A转账给用户B 更新账户A 账户余额-100 更新账户B 账户余额+100 5) 锁定表:解决方案,对数据库加乐观锁和悲观锁 6)索引:索引应该建立在那些将用于JOIN、WHERE判断和ORDER BY排序的字段上。尽量不要对数据库中某个含有大量重复值的字段加索引。 7)优化的查询语句 a. 首先,最好是在相同类型的字段间进行比较。 b. 其次,在建有索引的字段上尽量不要使用函数进行操作。 Select * from userinfo where max(username)>0 c. 在搜索字符型字段时,有时候会用like关键字和通配符,这种写法会牺牲性能。 要采用like ‘user%’,而不是采用like ‘%user’或者like ‘%user%’ 8) 采用外键来保证数据库数据的一致性