需求: 在创建模块生成数据库表结构时,一般也要设计字段是否需要添加索引,或者多个字段联合索引。
单字段添加索引
设置索引只需要在字段初始化时添加index
参数,index (bool, default: False)
。
index
默认是False
,如果需要将字段添加索引设置为True
即可
name = fields.Char(string='名称', index=True)
age = fields.Integer(string='年龄', index=True)
虽然name
和age
都添加了索引,但是都是单独索引,不是联合索引。
多字段联合索引
在数据查询时一般需要设置联合索引,那么odoo默认是没有此方法的,需要在init
初始创建对应联合索引。代码如下:
@api.model
def init(self):
# 查询索引名称是否存在
self._cr.execute('''
select indexname from pg_indexes where indexname = 'employee_name_age_idx'
''')
# 不存在则设置索引
if not self._cr.fetchone():
# 执行创建索引sql
self._cr.execute('''
create index employee_name_age_idx on employee (name, age)
''')
小结
合理的添加索引会大大增加系统及数据的访问速度和处理速度,在设计的时候尽量创建联合索引来覆盖大多数查询,这里就扩展讨论了。