面试题答案
一键面试合理创建索引优化复杂查询
为了优化根据 name
和 age
进行的组合查询,可以在 name
和 age
列上创建复合索引。复合索引的顺序很重要,应该将选择性高(数据分布更分散)的列放在前面。例如,如果 name
的值更具多样性,索引可以这样创建:CREATE INDEX idx_name_age ON your_table_name (name, age);
。
索引生效原理
索引就像是一本书的目录,数据库在查询时,首先在索引中查找符合条件的值,而不是全表扫描。复合索引会按照索引列的顺序依次进行匹配,通过快速定位到满足前面列条件的记录,再进一步筛选满足后续列条件的记录,从而大幅减少需要扫描的数据量,提高查询效率。
Flutter中创建索引的代码示例
假设使用 sqflite
库,代码如下:
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
Future<void> createIndex() async {
final databasePath = await getDatabasesPath();
final path = join(databasePath, 'your_database.db');
Database database = await openDatabase(
path,
version: 1,
onCreate: (Database db, int version) async {
await db.execute('''
CREATE TABLE your_table_name (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
address TEXT,
phone TEXT
)
''');
// 创建复合索引
await db.execute('CREATE INDEX idx_name_age ON your_table_name (name, age);');
},
);
}
调用 createIndex()
方法即可在数据库创建索引。