У меня есть таблица в MySQL, которая состоит из более чем 400 миллионов строк. Это выглядит примерно так:
device date type .....
A 2019-06-16 1
A1 2019-06-20 2
A2 2019-10-16 3
B 2019-06-16 3
В настоящее время, когда я запускаю запрос show index, он выдает:
Table Non_unique key_name seq_in_index col_name Collation Cardinality Index_type
device_table 1 table_device_date 1 device A 6444 BTREE
device_table 1 table_device_date 2 date A 418571 BTREE
Поскольку мои данные слишком велики, я хочу звонить изо дня в день в python затем добавляйте каждый день. (Вызов месяца в python не работает, и я не хочу увеличивать масштаб.)
, поэтому я хочу назвать данные за один день наиболее эффективным способом.
Explain select * from device_table
where date between DATE('2019-10-01') AND DATE('2019-10-02');
который выводит
Id select_type table type rows Extra
1 simple device_table All 400mil Using Where
У меня есть индекс по столбцу даты, почему он не используется в приведенном выше запросе?
Кроме того, что означает seq_in_index в запросе show index?
Спасибо.
EDIT: Спасибо EdmCoff, Akina.
С их помощью, если я правильно понял. Поскольку индексация в моей таблице имеет порядок [устройство, дата], я не могу go прямо и искать [дату], поэтому для использования индекса даты необходимо сделать это через устройство.
, чтобы сделать это , Я делаю что-то вроде
select * from device_table
where
device = 'A' and
date between DATE('2019-10-01') and DATE('2019-10-02');
и, кажется, работает отлично.
Только сейчас у меня есть около 7000 различных устройств и нужно получить дату с 2019-10-01 ~ 2019- 12-01.
Мой подход сейчас заключается в использовании python (используя py mysql),
date_range = pd.date_range(start='2019-10-01', end='2019-10-10', freq='1d').strftime('%Y-%m-%d')
for device_id in device_list:
for i in range(1, len(date_range)):
query = f"""
select * from device_table
where
device = '{device_id}' and
date between DATE('{date_range[i-1]}') and DATE('{date_range[i]}');
"""
df = pd.read_sql(query, con=conn)
final_df.append(df, sort=False, ignore_index=True)
Примечание: список_устройств = ['A', "B", .... и т. д. *
Был бы другой способ - изменить индексирование или другое?