Как оптимизировать UPDATE с вложенным подзапросом SELECT?

, если вам нужно больше уникального, вы должны сгенерировать массив (1..100).

var arr=[];
function generateRandoms(){
for(var i=1;i<=100;i++) arr.push(i);
}
function extractUniqueRandom()
{
   if (arr.length==0) generateRandoms();
   var randIndex=Math.floor(arr.length*Math.random());
   var result=arr[randIndex];
   arr.splice(randIndex,1);
   return result;

}
function extractUniqueRandomArray(n)
{
   var resultArr=[];
   for(var i=0;i<n;i++) resultArr.push(extractUniqueRandom());
   return resultArr;
}

выше код быстрее: extractUniqueRandomArray (50) => [2, 79, 38, 59, 63, 42, 52, 22, 78, 50, 39, 77, 1, 88, 40, 23, 48, 84, 91, 49, 4, 54, 93, 36, 100, 82, 62, 41, 89, 12, 24, 31, 86, 92, 64, 75, 70, 61, 67, 98, 76, 80, 56, 90, 83, 44, 43, 47, 7, 53]

1
задан Thrash Tech 16 January 2019 в 05:27
поделиться

1 ответ

Рассмотрим обновление внутреннего объединения через три самостоятельных объединения:

UPDATE " . POSTS_TABLE . " AS final
INNER JOIN " . POSTS_TABLE . " AS p
  ON p.poster_id = final.poster_id
  AND p.topic_id = final.topic_id
  AND p.topic_id = $topic_id
  AND p.post_id NOT IN ($merged_post_list)
  AND p.anonymous_index > 0
INNER JOIN " . POSTS_TABLE . " AS merged 
  ON merged.poster_id = p.poster_id
  AND merged.topic_id = p.topic_id 
  AND merged.topic_id = $topic_id
  AND merged.post_id IN ($merged_post_list)
  AND merged.anonymous_index > 0

SET final.anonymous_index = p.anonymous_index

WHERE final.anonymous_index > 0
  AND final.anonymous_index <> p.anonymous_index
0
ответ дан Parfait 16 January 2019 в 05:27
поделиться
Другие вопросы по тегам:

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