面试题答案
一键面试- 创建合适的索引
- 适用场景:
- 当经常基于某列或多列进行
WHERE
条件过滤时,比如在用户表中经常根据user_id
查询用户信息,就可以在user_id
列上创建索引。在SELECT * FROM users WHERE user_id = 123;
这样的查询中,索引能大大加快查询速度。 - 对于
JOIN
操作,在连接列上创建索引也很有帮助。例如在订单表orders
和用户表users
通过user_id
连接查询SELECT * FROM orders JOIN users ON orders.user_id = users.user_id;
,在orders
表和users
表的user_id
列创建索引能提升查询性能。
- 当经常基于某列或多列进行
- 适用场景:
- 使用事务
- 适用场景:
- 当需要进行大量插入、更新或删除操作时,使用事务可以减少磁盘I/O次数。比如批量导入数据到数据库,如果没有事务,每一次插入操作都可能触发磁盘I/O。而使用事务
BEGIN; INSERT INTO table (column1, column2) VALUES ('value1', 'value2'); INSERT INTO table (column1, column2) VALUES ('value3', 'value4');... COMMIT;
,只有在事务结束(COMMIT
)时才会将数据持久化到磁盘,大大提高操作效率。
- 当需要进行大量插入、更新或删除操作时,使用事务可以减少磁盘I/O次数。比如批量导入数据到数据库,如果没有事务,每一次插入操作都可能触发磁盘I/O。而使用事务
- 适用场景:
- 优化SQL语句
- 适用场景:
- 避免使用通配符
*
,明确指定需要查询的列。例如SELECT column1, column2 FROM table;
比SELECT * FROM table;
性能更好,因为这样减少了不必要的数据传输和解析。 - 避免在
WHERE
子句中对列进行函数操作。例如SELECT * FROM users WHERE UPPER(name) = 'JOHN';
,应该改为SELECT * FROM users WHERE name = 'john';
然后在应用层将查询条件转为大写,因为对列进行函数操作会阻止索引的使用。
- 避免使用通配符
- 适用场景:
- 合理设置缓存
- 适用场景:
- 对于经常查询且数据不经常变化的数据,可以在应用层设置缓存。比如应用中有一个配置表,其中的数据可能几个月才更新一次,但每次打开应用都需要查询。这时可以在应用启动时查询一次配置表数据并缓存起来,后续直接从缓存获取,减少对SQLite数据库的查询次数,提高应用响应速度。
- 适用场景: