Как разместить рекламу в моем приложении для Android?

Я новичок в интеграции рекламы в мое приложение для Android. Я не знаю, как это будет работать с Android Devices и как интегрировать его в мой проект. Но только из-за требования я должен поместить рекламу в свой проект.

Мне понадобятся подробности для следующего.

  • Как добавить рекламу в мой проект?
  • Как он будет работать?
  • Какие шаги я должен выполнить, чтобы интегрировать его в мой проект?

Было бы лучше, если бы был простой демонстрационный проект, который может объяснить.

-121--1193906- Оптимальный запрос последней записи для каждого N Вот сценарий, в котором я оказался. У меня достаточно большая таблица, из которой мне нужно запросить последние записи. Вот создание для основных столбцов для запроса: CREATE TABLE [dbo]. [...

Вот сценарий, в котором я оказался.

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

CREATE TABLE [dbo].[ChannelValue](
   [ID] [bigint] IDENTITY(1,1) NOT NULL,
   [UpdateRecord] [bit] NOT NULL,
   [VehicleID] [int] NOT NULL,
   [UnitID] [int] NOT NULL,
   [RecordInsert] [datetime] NOT NULL,
   [TimeStamp] [datetime] NOT NULL
   ) ON [PRIMARY]
GO

Столбец ID является первичным ключом и существует некластеризованный индекс для VehicleID и TimeStamp

CREATE NONCLUSTERED INDEX [IX_ChannelValue_TimeStamp_VehicleID] ON [dbo].[ChannelValue] 
(
    [TimeStamp] ASC,
    [VehicleID] ASC
)ON [PRIMARY]
GO

Таблица, над которой я работаю для оптимизации запроса, составляет чуть более 23 миллионов строк и составляет только 10-ю часть от размера, с которым должен работать запрос.

Мне нужно вернуть последнюю строку для каждого идентификатора транспортного средства.

Я просмотрел ответы на этот вопрос здесь, на StackOverflow, и я сделал довольно много гуглинга, и, похоже, есть 3 или 4 общих способа сделать это на SQL Server 2005 и выше.

До сих пор самый быстрый метод, который я нашел, это следующий запрос:

SELECT cv.*
FROM ChannelValue cv
WHERE cv.TimeStamp = (
SELECT
    MAX(TimeStamp)
FROM ChannelValue
WHERE ChannelValue.VehicleID = cv.VehicleID
)

С текущим объемом данных в таблице требуется около 6 с для выполнения, что находится в разумных пределах, но с объемом данных, которые таблица будет содержать в рабочей среде, запрос начинает выполняться слишком медленно.

Рассматривая план выполнения, я беспокоюсь о том, что делает SQL Server для возврата строк.

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

Execution Plan

Я попробовал переписать запрос несколькими различными методами, в том числе с помощью метода разбиения SQL 2005 следующим образом:

WITH cte
AS (
    SELECT *,
    ROW_NUMBER() OVER(PARTITION BY VehicleID ORDER BY TimeStamp DESC) AS seq
     FROM ChannelValue
)

SELECT
   VehicleID,
   TimeStamp,
   Col1
FROM cte
WHERE seq = 1

Но производительность этого запроса еще хуже в значительной степени.

Я пытался переструктурировать запрос так, но скорость результата и план выполнения запроса почти идентичны:

SELECT cv.*
FROM (
   SELECT VehicleID
    ,MAX(TimeStamp) AS [TimeStamp]
   FROM ChannelValue
   GROUP BY VehicleID
) AS [q]
INNER JOIN ChannelValue cv
   ON cv.VehicleID = q.VehicleID
   AND cv.TimeStamp = q.TimeStamp

У меня есть некоторая гибкость вокруг структуры таблицы (хотя и в ограниченной степени), так что я могу добавлять индексы, индексированные представления и т.д. или даже дополнительные таблицы в базу данных.

Я был бы очень признателен за любую помощь здесь.

Изменить Добавлена ссылка на образ плана выполнения.

16
задан Community 8 February 2017 в 14:33
поделиться