Сравнение строк и значений Оптимизация запросов MySQL

Моя проблема заключается в следующем: у меня есть два массива $first и $second той же длины, содержащие строки. Каждой строке присваивается положительное значение в таблице с именем Fullhandvalues :

 Field: board : string(7) PRIMARY KEY Field: value : int (11) 

Я хочу подсчитать, сколько раз $ first [$ i] имеет лучшее значение, чем $ second [$ i], сколько раз они имеют одинаковое значение и сколько раз $ first [$ i] имеет худшее значение, чем $ второй [$ я].

То, что я сделал сейчас, получает все значения через

 $values[0]= DB::table('Fullhandvalues')->where_in("board",$first)->get(Array("value")); $values[1]= DB::table('Fullhandvalues')->where_in("board",$second)->get(Array("value")); 

а затем сравнивая значения. Но это кажется очень медленным (примерно 6 секунд, для массива длиной 5000 и 50000 записей в таблице)

Большое спасибо заранее

EDIT: Как я их просматриваю:

 $win=0;$lose=0;$tie=0; for($i=0;$i<count($values[0]);$i++) { if ($values[0][$i]>$values[1][$i]) $win++; elseif ($values[0][$i]<$values[1][$i]) $lose++; else $tie++; } 

Solutions Collecting From Web of "Сравнение строк и значений Оптимизация запросов MySQL"

Ваша проблема: where_in . Вы в основном создаете запрос с длиной implode(',', $second) (плюс изменение). Это должно быть сначала создано Laravel (PHP), а затем проанализировано вашей СУБД.

Также сгенерированный запрос будет использовать выражение IN(...) , которое, как известно, медленное в MySQL.

Без дополнительной информации о приложении и том, как идентификаторы платы выбраны, вот вариант, который у вас есть:

  • Создайте временную таблицу и заполните ее данными массива (это должно быть довольно быстро, но желательно, чтобы эти данные уже были в базе данных)
  • Не забудьте создать индекс в таблице temp.
  • Выберите с помощью внутреннего join .