Один столбец SELECT в индексированном поле даже не потребует чтения каких-либо записей файла данных.Если вы загляните внутрь, вы увидите, что индексный файл является обычным хеш-файлом, а один столбец SELECT будет просто означать, что запись индексного файла с ключом «str» читается.Это может вернуть тысячи и тысячи ключей менее чем за секунду.
После добавления второго столбца вы, вероятно, заставляете систему читать все эти тысячи и тысячи записей, ДАЖЕ ЕСЛИ ВТОРАЯ КОЛОННА ЕСТЬINDEXED.Это измеримое время займет больше времени.
В общем, индекс поля с небольшим количеством уникальных значений сомнительно полезен.Если второй столбец содержит данные, которые имеют большое количество возможных значений, что приводит к меньшему количеству записей с каждым конкретным значением индекса, то было бы лучше расположить SELECT таким образом, чтобы используемый индекс находился во втором столбце.Я не уверен, но для этого можно просто изменить порядок столбцов в операторе SELECT.В противном случае вам может потребоваться запустить два оператора SELECT вплотную.
В качестве примера предположим, что в файле содержится 600 000 записей с Column1 = "str" и 2000 записей с Column2 = "int":
>SELECT somewhere WITH Column2 = "int"
>>SELECT somewhere with Column1 = "str"
Будет читать 2000 записей и должен возвращаться почти мгновенно.
Если комбинация Column1 и Column2 - это то, что вы часто выбираете, то вам может потребоваться создать новый элемент словаря.который объединяет их и строит для них индекс.
При этом система U2 не должна занимать 5 минут, чтобы просмотреть файл с миллионами записей.Очень высока вероятность того, что файл сильно переполнен, и для повышения производительности его размер нужно изменить с помощью большего модуля.