我的表由104856行组成,具有13列。 该表的架构如下:
public static final class Vehicle4Wheel implements BaseColumns{
public static final String TABLE_NAME="Vehicle4Wheel";
public static final String VEH_ID = "VEH_ID";
public static final String VEH_REG_NUM = "VEH_REG_NUM";
public static final String VEH_ENGINE_NO = "VEH_ENGINE_NO";
public static final String VEH_CHASIS_NO= "VEH_CHASIS_NO";
public static final String VEH_MAKE= "VEH_MAKE";
public static final String VEH_MAKE_MODEL= "VEH_MAKE_MODEL";
public static final String VEH_COLOR = "VEH_COLOR";
public static final String VEH_MODEL = "VEH_MODEL";
public static final String VEH_CC = "VEH_CC";
public static final String OWN_NAME = "OWN_NAME";
public static final String OWN_FNAME = "OWN_FNAME";
public static final String CNIC = "OWN_CNIC";
public static final String OWN_ADDRESS = "OWN_ADDRESS";
}
我想使用VEH_REG_NUM,VEH_ENGINE_NO,VEH_CHASIS_NO搜索数据。 为了在表中更快地进行搜索,我创建了一个复合索引。索引查询如下:
String indexVeh4Wheel = "CREATE INDEX veh4wheel_search ON Vehicle4Wheel(VEH_REG_NUM, VEH_ENGINE_NO, VEH_CHASIS_NO)";
当我使用VEH_REG_NUM搜索数据时,搜索速度很快。
当我使用VEH_ENGINE_NO和VEH_CHASIS_NO搜索数据时,搜索速度很慢。
是否需要为每列创建一个单独的索引以获得更快的结果?
喜欢,
String indexVeh4reg = "CREATE INDEX veh4wheel_reg ON
Vehicle4Wheel(VEH_REG_NUM)";
String indexVeh4eng = "CREATE INDEX veh4wheel_eng ON
Vehicle4Wheel(VEH_ENGINE_NO)";
String indexVeh4chass = "CREATE INDEX veh4wheel_chass ON
Vehicle4Wheel(VEH_CHASIS_NO)";
答案 0 :(得分:1)
简而言之:是的。
DB索引是对行的引用的列表*,按创建索引时提供的任何列进行排序。排序的工作方式与“排序依据”相同-仅当所有前者不是决定性的条件时,才考虑后者的条件。对于您而言,除非您有多辆具有相同注册号的车辆,否则将永远不会使用其他两列。
即使是这样,也不会加快搜索速度:想象一个按姓氏,然后按名字排序的人员列表。这对于两种类型的搜索将非常有用:
但是,对于搜索具有特定名字的人没有太大帮助。无论如何,您都需要浏览所有列表,因为名字与名字不同,永远不会聚集在一起。