SQLite оптимизация мультиизбранной вставки

Хотя вы можете найти гораздо более сложные примеры (например, , или даже , ) - это действительно простой пример, с которым вы можете поиграть:

[118 ]

// Select DOM elements
var rangeSlider = document.getElementById('range');
var textInput = document.getElementById('textInput');

// Add event listeners
rangeSlider.addEventListener('mouseup', function() {
  textInput.style.visibility = 'hidden';
});
rangeSlider.addEventListener('mousedown', function() {
  textInput.style.visibility = 'visible';
});

function updateTextInput(val) {
  textInput.value = val;
}
#textInput { visibility: hidden; }

Надежда, которая помогает и удачи!

РЕДАКТИРОВАТЬ:

Didn Я не совсем понимаю вашу проблему. Основываясь на твоей скрипке, я сделал что-то подобное:

var slider = document.getElementById("myRange");
var output = document.getElementById("demo");
var result = document.getElementById('result');
output.innerHTML = slider.value;
filterSystem();
slider.oninput = function() {
  output.innerHTML = this.value;  
  filterSystem();
}

 function filterSystem() {
  var currentMatch = document.querySelectorAll('.js-match');
  for (var i=0; i
.slidecontainer {
  width: 100%;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  height: 15px;
  border-radius: 5px;
  background: #d3d3d3;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
}

.slider:hover {
  opacity: 1;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  appearance: none;
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}

.slider::-moz-range-thumb {
  width: 25px;
  height: 25px;
  border-radius: 50%;
  background: #4CAF50;
  cursor: pointer;
}

.js-match {display: none;}

Round Range Slider

Value:

1

22

333

4444

55555

5
задан Brad Robinson 10 April 2009 в 14:43
поделиться

2 ответа

Скорее всего, дополнительные объединения убивают вас. Что если вы сделаете:

SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers 
WHERE EXISTS( SELECT *
                FROM SubscriberGroups
               WHERE Subscribers.ID=SubscriberGroups.SubscriberID
                                 AND SubscriberGroups.GroupID IN ('1', '2', '3') )

  AND NOT EXISTS( SELECT *
                    FROM SubscriberGroups
                   WHERE Subscribers.ID=SubscriberGroups.SubscriberID 
                     AND SubscriberGroups.GroupID IN ('4', '5', '6')
    );

Вы также хотели бы убедиться, что у вас есть индекс для SubscriberGroups (SubscriberID, GroupID)

Я предполагаю, что у подписчиков уже есть индекс по ID, верно?

EDIT: Другой вариант, который может быть или не быть быстрее. Посмотрите на планы запросов каждого, чтобы увидеть ...

Это может быть одно сканирование индекса, которое может быть быстрее, чем два поиска индекса, но это зависит от оптимизатора SQLite ...

SELECT Subscribers.ID, '1' AS TemplateID
FROM Subscribers 
INNER JOIN( SELECT SUM( CASE WHEN GroupID IN('1', '2', '3') THEN 1 ELSE 0 END ) AS inGroup,
                   SUM( CASE WHEN GroupID IN('4', '5', '6') THEN 1 ELSE 0 END ) AS outGroup,
                   SubscriberID
                            FROM SubscriberGroups
                         WHERE SubscriberGroups.GroupID IN ('1', '2', '3', '4', '5', '6' )
          ) SubscriberGroups
       ON Subscribers.ID=SubscriberGroups.SubscriberID
      AND inGroup  > 0
      AND outGroup = 0
6
ответ дан 14 December 2019 в 01:16
поделиться

Еще один способ написать SQL, который может быть быстрее (у меня нет SQLite для тестирования):

SELECT
     S.ID,
     '1' AS TemplateID     -- Is this really a string? Does it need to be?
FROM
     Subscribers S
LEFT OUTER JOIN SubscriberGroups SG ON
     SG.SubscriberID = S.ID
WHERE
     SG.SubscriberID IS NULL AND
     EXISTS
     (
          SELECT
               *
          FROM
               SubscriberGroups SG2
          WHERE
               SG2.SubscriberID = S.ID AND
               SG2.GroupID IN ('1', '2', '3')  -- Again, really strings?
     )

Метод Мэтта также должен хорошо работать. Все зависит только от того, как SQLite решит создавать планы запросов.

Также обратите внимание на мои комментарии. Если они действительно определены как типы данных INT в вашей базе данных, потребуется дополнительная обработка для преобразования между двумя разными типами данных. Если они являются строками в базе данных, есть ли причина для этого? У вас есть нечисловые значения в этих столбцах?

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

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