2015-02-06 2 views
2

Пожалуйста, найдите нижерасположенную структуру таблиц «test» и имеет 5566 строк. test_table_structure
Пожалуйста найти объясненные детали для ниже запроса:
Две таблицы MYSQL с одинаковыми данными имеют разные размеры.

select * from test where sig_date='2014-03-15' and symbol='AXP' order by score; 

test_table_explain
я создал такую ​​же структуру таблицы с другим именем и с композитным PRIMARY KEY и вставляли те же данные, которые существуют в «тесте» Таблица. test_com_indx_strcture
Теперь объяснил запрос и выбрать только 9 записей:

select * from test_com_indx where sig_date='2014-03-15' and symbol='AXP' order by score; 

test_with_composite_index
, когда я проверил 2 размера таблицы, test_com_indx занимает больше места и в обеих таблицах имеет одни и те же данные. table_space_details
Я полагаю, что в качестве таблицы «test» имеет PRIMARY KEY в качестве id, данные хранятся физически в порядке id. и в таблице «test_com_indx» данные хранятся физически в порядке составного PRIMARY KEY. Таким образом, нет отдельной копии индекса для обеих таблиц , и обе таблицы должны иметь одинаковый размер.

Пожалуйста, исправьте меня, если мое предположение неверно и почему обе таблицы имеют разный размер?

Заранее спасибо.

+0

Сколько места занимает «больше места»? –

+0

Пожалуйста, проверьте детали, которые я добавил в вопрос – user3796869

+0

Имеем ли они одинаковые ряды всего? 'select count (*) из test'' select count (*) из test_com_indx'? –

ответ

1

Выполнение некоторых результатов, результаты от information_schema.TABLES могут выйти из-под контроля с реальностью, что объясняет, почему ваши TABLE_ROWS отличаются. Запуск ANALYZE TABLE test, test_com_indx может привести их в синхронизацию.

Если после этого размеры остаются разными, то я ошибаюсь в том, что ANALYZE исправляет проблему или ее из-за этих различий в вашей схеме.

  • test_com_indx использует VARCHAR(10), тест имеет VARCHAR(25).
  • test имеет дополнительный столбец идентификатора INTEGER и должен отслеживать AUTOCOMMIT.
  • test_com_indx имеет сложный первичный ключ.

Или/и его, потому что нет никакой гарантии, о том, как внутренние работы, даже если вы делаете одно и то же дважды. Базы данных SQL декларативны, вы не должны знать, как они отвечают на ваши запросы, что освобождает сервер, чтобы делать все, что наиболее эффективно. Существует много причин, почему это может быть так ...

  • Порядок INSERT может изменить способ хранения данных.
  • Индексы могут изменять способ хранения данных.
  • InnoDB does not store one table per file. Все это перемешано в табличном пространстве. Изменение в одной таблице может изменить внутреннее хранилище другого.
Смежные вопросы