Как делает включая индексную подсказку SQL, влияют на производительность запросов?

Самый простой способ сделать это как DataFrame - сначала собрать два списка, а затем использовать UDF - zip два списка вместе. Что-то вроде:

import org.apache.spark.sql.functions.{collect_list, udf}
import sqlContext.implicits._

val zipper = udf[Seq[(String, Double)], Seq[String], Seq[Double]](_.zip(_))

val df = Seq(
  ("john", "tomato", 1.99),
  ("john", "carrot", 0.45),
  ("bill", "apple", 0.99),
  ("john", "banana", 1.29),
  ("bill", "taco", 2.59)
).toDF("name", "food", "price")

val df2 = df.groupBy("name").agg(
  collect_list(col("food")) as "food",
  collect_list(col("price")) as "price" 
).withColumn("food", zipper(col("food"), col("price"))).drop("price")

df2.show(false)
# +----+---------------------------------------------+
# |name|food                                         |
# +----+---------------------------------------------+
# |john|[[tomato,1.99], [carrot,0.45], [banana,1.29]]|
# |bill|[[apple,0.99], [taco,2.59]]                  |
# +----+---------------------------------------------+
5
задан Duffy 22 September 2008 в 20:13
поделиться

4 ответа

Во-первых, попытайтесь использовать SQL Profiler для генерации .trc файла действия в базе данных для нормальной рабочей нагрузки за несколько часов. И затем используйте "Настраивающего Советника по вопросам Механизма базы данных" в меню SQL Server Management Studio Tools, чтобы видеть, предлагает ли оно какие-либо дополнительные индексы, сводные индексы или покрывающие индексы, которые могут быть выгодными.

Я никогда не использую подсказки запроса и главным образом работаю с многомиллионными базами данных строки. Они иногда могут влиять на производительность негативно.

3
ответ дан 14 December 2019 в 01:21
поделиться

Мой опыт состоит в том, что иногда Вы знаете больше о своем наборе данных затем, SQL Server делает. В этом случае необходимо использовать подсказки запроса. Другими словами: Вы помогаете оптимизатору решить.

Я однажды создаю datawarehouse, где SQL Server не использовал оптимальный индекс на сложном запросе. Путем предоставления индекса подсказывают в моем запросе, мне удалось заставить запрос пойти приблизительно в 100 раз быстрее.

Используйте их только после анализа плана запросов. Если Вы думаете, что Ваш запрос может работать быстрее при использовании другого индекса или при помощи их в другом порядке, дать серверу подсказку.

1
ответ дан 14 December 2019 в 01:21
поделиться

Индексная подсказка только сыграет роль, где Ваш запрос включает присоединяющиеся таблицы, и где столбцы, используемые для соединения с другой таблицей, соответствуют больше чем одному индексу. В этом случае механизм базы данных может принять решение использовать один индекс для создания соединения, и от расследования можно знать, что, если это использует другой индекс, запрос будет работать лучше. В этом случае Вы обеспечиваете индексную подсказку, говоря механизм базы данных, которые индексируют для использования.

2
ответ дан 14 December 2019 в 01:21
поделиться

Ключевой пункт, что я верю всем здесь, указывает, то, что с ОЧЕНЬ внимательным рассмотрением использование индексных подсказок может улучшить производительность Ваших запросов, ЕСЛИ И ТОЛЬКО ЕСЛИ, несколько индексов существуют, который мог использоваться для получения данных, И если SQL Server не использует корректный.

По моему опыту, я нашел, что не очень распространено должно Индексировать подсказки, я полагаю, что у меня, возможно, есть 2-3 запроса, которые используются сегодня, которые использовали их.... Надлежащее создание индекса и оптимизация базы данных должны получить Вас большая часть пути там к работающей базе данных.

3
ответ дан 14 December 2019 в 01:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: