Оптимизация запросов к базе данных с использованием SQL/XML. Предлагаемые ресурсы?
Этот вопрос является как теоретическим, так и практическим. Будут оценены любые результаты, указывающие на полезные ресурсы по оптимизации запросов.
Существует большая база данных SQL, в которой хранится большой объем данных, хранящихся в полях SQLXML. Запрашивать XML напрямую недостаточно быстро.
Я просмотрел некоторые статьи MSDN по оптимизации SQLXML (например, http://msdn.microsoft.com/en-us/library/aa902661(SQL.80).aspx) и знаю, что индексирование полей xml с возможностью поиска увеличится Скорость поиска.
Кто-нибудь может порекомендовать какие-либо дополнительные ресурсы для оптимизации баз данных, как в этой среде, так и в целом, которые особенно полезны? Как всегда, я ценю вашу помощь
3 ответа
Это зависит от того, что вам нужно сделать с вашим XML. У меня есть аналогичная установка, где структура таблицы была сделана "общей", а все, что связано с продуктом, было спрятано в поле XML.
Мы также заметили трудный способ, которым запросы XML не являются исключительно быстрыми.... и использование индексов XML (которые также предлагает SQL Server) заставило размер нашей базы данных подскочить примерно с 1 ГБ до более 10 ГБ.....
То, что мы делаем сейчас для отдельных элементов из XML, это:
- создать пользовательскую функцию, которая получает содержимое XML в качестве параметра
- извлечь значение из этого параметра XML
- используя этот UDF для определения вычисляемого постоянного столбца в родительской таблице
Благодаря этому мы можем извлечь определенные значения ключей (например, "ProductID" или "ProductName") из XML и сохранить их в родительской таблице в виде столбца. Он вычисляется, например, всегда актуален, и, поскольку он также сохраняется, он хранится вместе с данными таблицы, например, он не запрашивается постоянно и не пересчитывается. И поскольку он сохраняется с данными таблицы, вы можете даже добавить к нему индекс.
Это работает очень хорошо, но работает только в тех случаях, когда у вас есть отдельные, однозначные вещи, которые вы хотите извлечь из XML. Для этого случая это отличное решение, и оно ускоряет запросы к этим значениям на несколько порядков.
Показать примерный план выполнения.
Также:
SET STATISTICS IO ON
SET STATISTICS TIME ON
Пока вы точно не отвечаете на ваш вопрос, вы можете подумать о другой стратегии поиска. SQL Server/Oracle и MySQL отлично подходят для хранения больших объемов реляционных данных, однако в большинстве случаев они не так хороши, когда речь идет о поиске текста (очевидно, это зависит от того, что вы ищете, и ваших индексов).
Я бы посоветовал вам потратить немного времени на поиск поисковой системы, такой как Lucene, так как она может удовлетворить ваши потребности лучше, чем SQL?