В этой статье Quassnoi создает таблицу с 2,441,405 строками в иерархической структуре и проверяет производительность высокооптимизированных запросов для вложенных множеств и списков смежности. Он запускает множество различных тестов, например, выбор предков или потомков и время их получения (подробнее читайте в статье):
Nested Sets Adjacency Lists
All descendants 300ms 7000ms
All ancestors 15ms 600ms
All descendants up to a certain level 5000ms 600ms
Его вывод заключается в том, что для MySQL вложенные наборы быстрее запрашивать, но имеет недостаток, заключающийся в том, что его обновление выполняется намного медленнее. Если у вас есть нечастые обновления, используйте вложенные наборы. В противном случае предпочитайте списки смежности.
Вы также можете рассмотреть возможность использования другой базы данных, которая поддерживает рекурсивные CTE.
Я бы предположил, что для анализа XML-файла такого размера потребуется достаточно много времени, но если вы сможете кэшировать проанализированную структуру в памяти, а не читать ее с диска каждый раз, тогда запросы к ней будут очень быстрыми. 1010 *
Обратите внимание, что основным недостатком использования MySQL для хранения иерархических данных является то, что он требует некоторых очень сложных запросов. Хотя вы можете просто скопировать код из статьи, на которую я ссылался, если вам когда-нибудь понадобится немного изменить его, вам придется понять, как он работает. Если вы предпочитаете, чтобы все было просто, то XML определенно имеет преимущество, поскольку он был разработан для данных такого типа, и поэтому вы легко сможете создавать запросы, которые вам нужны.