field_v ( есть составной индекс (field_v, field_c):
box.execute([[EXPLAIN SELECT * FROM (SELECT * FROM "tbl_h" WHERE "start_date" <= 86 AND "end_date" >= 86 UNION ALL SELECT * FROM "test_a" WHERE "start_date" <= 86) AS "t3" WHERE ("field_v" = 'test' OR "field_v2" = 'test' OR ("field_vcn" = 'test' OR "field_vbn" = 'test')) AND "field_c" = 1]])
План выполнения:
---
- metadata:
- name: selectid
type: integer
- name: order
type: integer
- name: from
type: integer
- name: detail
type: text
rows:
- [1, 0, 0, 'SEARCH TABLE tbl_h USING COVERING
INDEX x_start_date (start_date<?) (~212992 rows)']
- [2, 0, 0, 'SEARCH TABLE test_a USING COVERING
INDEX x_start_date (start_date<?) (~229376 rows)']
- [0, 0, 0, 'COMPOUND SUBQUERIES 1 AND 2 (UNION ALL)']
Коллеги подскажите в чем проблема?
Насколько я вижу вы сначала выбираете значения в подзапросе по полям end_date и start_date, а потом уже на результатах подзапроса делаете еще один select и в данном случае составной индекс (field_v, field_c) безполезен
Обсуждают сегодня