MST
星途 面试题库

面试题:Flutter SQLite数据库复杂查询的索引优化

假设在Flutter应用的SQLite数据库中有一个包含大量记录的表,表结构为(id, name, age, address, phone),现在需要频繁进行多条件查询,如根据name和age进行组合查询。请描述如何合理创建索引来优化这类复杂查询,并解释索引生效的原理。同时,给出在Flutter中创建索引的代码示例。
27.1万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试

合理创建索引优化复杂查询

为了优化根据 nameage 进行的组合查询,可以在 nameage 列上创建复合索引。复合索引的顺序很重要,应该将选择性高(数据分布更分散)的列放在前面。例如,如果 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() 方法即可在数据库创建索引。