Я устраняю неполадки (или, по крайней мере, выявляю) возможные причины плохой производительности запросов в нашей организации Saleforce. Однако я подозреваю, что мой вопрос будет применим к большинству механизмов баз данных.
У нас достаточно большие объемы данных в нашей организации Salesforce. Наши проблемные объекты имеют примерно 15 миллионов записей. Мы создали API поверх нашей организации, который извлекает данные, и мы действительно боремся с производительностью. Пожалуйста, знайте, что мы понимаем, что есть вещи, которые можно сделать в долгосрочной перспективе, но мой вопрос больше касается понимания механизма запросов для баз данных.
Проблема заключается в следующем:
Мы можем выполнить запрос:
Select X From Account Where [IndexedField] Like 'value%' LIMIT 1000
по какой-то причине этот запрос превосходит запрос, такой как:
Select X From Account Where [Id] = 'IdValue'
оба поля в предложении where индексируются, но по какой-то причине одному фильтру Id требуется некоторое время, чтобы вернуть результат, где вы можете быстрее получить лучшие X-записи.
Понимая, что SFDC использует гибридный подход EAV к своим данным, но их данные хранятся в БД Oracle, я подозреваю, что это связано с общим способом, которым Oracle выполняет их поиск.
Почему поиск одной записи по идентификатору может занять больше времени, чем поиск [X] записей, соответствующих заданным критериям? Я посмотрел на планы запросов, оба имеют низкую стоимость и, очевидно, ID имеет самую низкую стоимость.
Нужно объяснить нашим ребятам из пользовательского интерфейса влияние поиска по 15M записям в меру своих возможностей.