Как настроить MYSQL дБ, когда производительность отличается от IFNULL () и IS NULL - PullRequest
0 голосов
/ 06 февраля 2020

Как настроить мой MYSQL дБ? Я обнаружил, что производительность между IFNULL () и IS NULL сильно отличается.

SELECT dtime,id FROM salesdata WHERE confirm!=1 OR confirm IS NULL ;

Продолжительность / время выборки: 0,0034 с 'Использование условия индекса; Используя where '

SELECT dtime,id FROM salesdata WHERE IFNULL(confirm,0)!=1 ;

Продолжительность / время выборки: 4.680 se c

Моя БД работает в виртуальной машине и около десяти тысяч записей:

$ mysql --version
mysql  Ver 15.1 Distrib 10.1.41-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

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

ОБНОВЛЕНИЕ: (Я добавляю больше информации в соответствии с руководством Акины)

Продолжительность / Время выборки: 0,0034 сек c

'Использование индексное состояние; Использование где '

против

Продолжительность / время выборки: 4.680 se c

' Использование где '

Это означает, что IFNULL () плохая производительность? Или что-то не так в моей БД?

1 Ответ

1 голос
/ 07 февраля 2020

OR ужасно для производительности - оптимизатор ничего не может с этим поделать; он должен сканировать всю таблицу (или индекс).

!=, вероятно, ужасно по той же причине.

Если confirm имеет два состояния, то самое чистое -

confirm  TINYINT UNSIGNED  NOT NULL  DEFAULT '0'

При необходимости установите значение 1. И используйте только эти для тестирования:

WHERE confirm = 0 AND ...
WHERE confirm = 1 AND ...

И имеют составной индекс (ы) , начинающийся с confirm при использовании таких предложений WHERE. 1021 *

По вашему запросу

SELECT dtime,id FROM salesdata WHERE confirm = 0

оптимальный INDEX будет INDEX(confirm, dtime, id). Если у вас есть другие запросы, которые проверяют confirm, пожалуйста, покажите их, чтобы я мог порекомендовать другие индексы. (Существует несколько шаблонов в зависимости от нескольких факторов.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...