Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > MySQL > Что влияет на скорость выполнения запроса? |
Автор: vngr6 8.2.2017, 15:55 | ||||
Используется: Комп: - 2,6Ггц - 6,0 Гб ОЗУ - Win 7x64 Программы: - OpenServer - Access - 2016 - MySql 5.7 x 64 - Odbc - mysql-connector-odbc-5.3.7-winx64 Всё установлено и используется на одном компьютере Характеристики таблицы: - кол строк предполагается - больше 1,0 млн - количество столбцов ~ 20 штук Таблица (tbl8) Кол. строк - 12 425 строк Объём - 24,6 Мб
В таблице тип полей "LONGTEXT" принят как предварительный, для проверки работы базы... Потом полям будут присвоены необходимые типы: LONGTEXT, TEXT, числа, даты и т.д. В полях: pol_9, pol_10, pol_11 используется много строчный текст более 1 000 символов. В остальных полях просто текст "ТЕКСТ _ ЗАПИСИ pol_n" Запрос Выполняем запрос в программе HeidiSql из таблицы tbl8
Запрос выполняется 2 сек. Когда количество строк достигает более 100 000 - длительность выполнения запроса 40 сек. Вопрос Как уменьшить длительность выполнения запроса? Что влияет на длительность выполнения запроса? |
Автор: Zloxa 8.2.2017, 16:12 |
если предикат по idsub достаточно селективен и нет к тому противопоказаний - проиндексировать idsub длительность выполнения операций, необходимых для его исполнения ![]() |
Автор: vngr6 8.2.2017, 16:18 |
Что такое "селективен"? Там постоянно повторяются числа от 1 - 35 См. скрин http://prntscr.com/e6286a |
Автор: Akina 8.2.2017, 16:46 |
То есть селективность его порядка 3%, индексация по этому полю - разумна. |
Автор: Zloxa 8.2.2017, 17:57 |
Селективным(высокоселективным) называется предикат, для которого коэффициент селективности низок. Коэффициент селективности рассчитывается как отношение количества записей, отобранных по предикату к исходному количеству записей. Наиболее селективен тот предикат, чей коэффициент селективности устремляется к нулю. Наименее селективен тот предикат, чей коэффициент селективности устремляется к единице. Здесь важно не то, сколько значений может принимать столбец, а сколько будет возвращено записей по конкретному значению. Если распределение данных таково, что по значению 2 будет отобрано 10 записей из 1кк, то предикат можно считать достаточно селективным и индексный доступ по этому предикату будет оправдан. Если по значению 2 будет возвращено 100к из 1кк, индексный доступ может оказаться не эффективным и, используя его запрос будет выполняться еще дольше. |