powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Увеличить скорость запроса
18 сообщений из 18, страница 1 из 1
Увеличить скорость запроса
    #38542807
slava7k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Хотел узнать, возможно ли увеличение скорости запроса? Может индексы не правильно стоят?

Сама таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE IF NOT EXISTS `data_var_bb` (
  `id` INT NULL AUTO_INCREMENT,
  `ver_id` MEDIUMINT UNSIGNED NOT NULL,
  `data_id` INT UNSIGNED NOT NULL,
  `sort` MEDIUMINT UNSIGNED NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB



Стоит два индекса: ver_id и sort.

Запрос:
Код: sql
1.
SELECT data_id FROM `data_var_bb` WHERE `ver_id` = 52 AND `sort` >= 12300 ORDER by `sort` ASC LIMIT 50;



Результат:
Код: sql
1.
50 rows in set (0.55 sec)
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38542815
Aleksandr Kuzminsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slava7k,

Добавьте индекс
Код: sql
1.
ALTER TABLE data_var_bb ADD INDEX (ver_id, sort) 
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38542820
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
slava7k,

explain в студию

И еще, все связанные атрибуты желательно определять в идентичном формате независимо от предполагаемой емкости ресурса.

У вас
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38542824
deblogger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...нажалась кнопка...

У вас PK со знаком, какие-то медиумы без знака и все такое. Забейте. Тотально

int unsigned not null и смотрите explain что куда добавить по индексам

И сколько в этой табле всего записей?
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38543131
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
debloggerУ вас PK со знаком, какие-то медиумы без знакаА почему бы и нет?
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38543157
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft, ну пк (тем более суррогат-автоинкремент) со знаком и впрямь не нужен.
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38543167
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirmiksoft, ну пк (тем более суррогат-автоинкремент) со знаком и впрямь не нужен.Обычно - да. Но у меня в практике были случаи, когда добавлялись записи со значениями -1, -2 и т.д. для каких-то специальных значений. Конечно это костыль, но на живой эксплуатирующейся базе это бывает самый малокровный выход.
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38543639
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эм? а что НЕ костыль?
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544298
slava7k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Kuzminsky,

Добавил:
Код: sql
1.
ALTER TABLE data_var_bb ADD INDEX (ver_id, sort) 



Скорость увеличилась:
Код: sql
1.
50 rows in set (0.07 sec)



В таблице 25 млн. записей. Меня в принципе такая скорость устраивает, или можно ещё быстрее? )
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544307
Aleksandr Kuzminsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slava7kВ таблице 25 млн. записей. Меня в принципе такая скорость устраивает, или можно ещё быстрее? )

Попробуйте еще такой индекс (в EXPLAIN должно появиться "using index")

Код: sql
1.
ALTER TABLE data_var_bb ADD INDEX (ver_id, sort, data_id) 



Но учтите, что чем больше индексы, тем медленнее запись/обновление
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544321
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Kuzminsky,

а смысл в таблице тогда, если индекс её всю покрывает, вместе с данными? :)

уж тогда проще сделать табличку в памяти или на рам-диск кинуть...
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544322
slava7k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksandr Kuzminsky,

Теперь получилось:
Код: sql
1.
50 rows in set (0.05 sec)



EXPLAIN такой:
Код: sql
1.
2.
3.
4.
5.
+----+-------------+-----------------+-------+-------------------------------+----------+---------+------+--------+--------------------------+
| id | select_type | table           | type  | possible_keys                 | key      | key_len | ref  | rows   | Extra                    |
+----+-------------+-----------------+-------+-------------------------------+----------+---------+------+--------+--------------------------+
|  1 | SIMPLE      | data_var_bb     | range | ver_id,sort,ver_id_2,ver_id_3 | ver_id_3 | 6       | NULL | 936178 | Using where; Using index |
+----+-------------+-----------------+-------+-------------------------------+----------+---------+------+--------+--------------------------+



Не много ли индексов используется, может первые два ver_id и sort лишние?
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544323
slava7k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109,

Да, индексы весят уже больше таблицы :) В ram не дело, таблиц много..
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544324
Aleksandr Kuzminsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slava7k
EXPLAIN такой:
Код: sql
1.
2.
3.
4.
5.
+----+-------------+-----------------+-------+-------------------------------+----------+---------+------+--------+--------------------------+
| id | select_type | table           | type  | possible_keys                 | key      | key_len | ref  | rows   | Extra                    |
+----+-------------+-----------------+-------+-------------------------------+----------+---------+------+--------+--------------------------+
|  1 | SIMPLE      | data_var_bb     | range | ver_id,sort,ver_id_2,ver_id_3 | ver_id_3 | 6       | NULL | 936178 | Using where; Using index |
+----+-------------+-----------------+-------+-------------------------------+----------+---------+------+--------+--------------------------+



Не много ли индексов используется, может первые два ver_id и sort лишние?

Используется только ver_id_3, остальные - всего лишь возможные.
Если другие запросы их не используют - удалите их.
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544327
Aleksandr Kuzminsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109Aleksandr Kuzminsky,

а смысл в таблице тогда, если индекс её всю покрывает, вместе с данными? :)

уж тогда проще сделать табличку в памяти или на рам-диск кинуть...

Бывает и такое, что индексов больше, чем самой таблицы. Плохо это или хорошо?
Зависит от задачи, от запросов.
Если таблица мало меняется, но по ней делается много выборок, то почему нет?

Засунуть все в память тоже не всегда выход.
Вот у человека два миллиона записей в таблице, а нужно всего 50. Если таблица будет читаться неоптимально, то надо будет все два миллиона прочитать, потом все два миллиона отсортировать, а потом взять 50, а остальное выкинуть. В таком случае Вы быстро упретесь в процессор.

А так MySQL прочитает 50 записей из индекса, а они уже в нужном порядке. Профит.
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544329
Arhat109
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aleksandr Kuzminsky,

я про тип таблички "MEMORY"... если памяти хватает, то такие заиндексированные таблички проще загонять в память целиком, скриптом при подъеме сервака... к примеру.
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38544332
Aleksandr Kuzminsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arhat109я про тип таблички "MEMORY"... если памяти хватает, то такие заиндексированные таблички проще загонять в память целиком, скриптом при подъеме сервака... к примеру.

Не поможет. Если доступ к данным будет неоптимальный, то процессор будет выполнять больше работы. См. пример выше
...
Рейтинг: 0 / 0
Увеличить скорость запроса
    #38545174
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если у вас есть индекс по двум столбцам (А, В), то индекс (А) лишний.

Соответственно если у вас есть (ver_id, sort), то индекс по ver_id не нужен.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Увеличить скорость запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]