我正在创建一个大型数据库,为了这个问题,让我们说,包含3个表:
:一种。表“员工”表示字段:
id = INTEGER PRIMARY INDEX AUTOINCREMENT
其他无所谓
B中。表“Job_Sites”表示字段:
id = INTEGER PRIMARY INDEX AUTOINCREMENT
其他无所谓
℃。表格“工作日”包含字段:
id = INTEGER PRIMARY INDEX AUTOINCREMENT
emp_id =是Employees的外键(id)
job_id =是Job_Sites(id)的外键
datew = INTEGER代表实际工作日,由1970年1月1日午夜以来的Unix日期表示
此数据库中最常见的操作是显示特定员工的工作日。我执行以下select语句:
SELECT * FROM工作日WHERE emp_id ='实际员工ID'AND job_id ='实际工作地点ID'和datew> = D1和datew< D2
我需要指出的是,D1和D2分别在搜索和下个月的月初计算。
我实际上有两个问题:
除了主索引之外,我应该将任何字段设置为索引吗? (对不起,我似乎误解了整个索引概念)
有没有办法重新编写Select语句以加快速度。例如,其中的大多数检查是看到实际的员工ID和作业站点ID匹配。也许有办法将其分开?
PS。忘了说,我在Windows C ++应用程序中使用SQLite。
答案 0 :(得分:2)
如果经常使用上述查询,那么通过创建包含查询中列的多列索引可以获得更好的性能:
CREATE INDEX WorkdaysLookupIndex ON Workdays (emp_id, job_id, datew);
有时您只需要创建索引并尝试查询以查看更快的内容。