powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Долгий простой запрос из небольшого количества записей.
13 сообщений из 13, страница 1 из 1
Долгий простой запрос из небольшого количества записей.
    #39810340
VladRost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!
Странная проблема - достаточно простой запрос:
SELECT
k.id kid, k.ip kip, k.time ktim, k.name knam, k.url kurl, k.ocenka koc, k.text ktex, s.zagol szag, k.server kserv
FROM
nstat25 k, nstat15 s
WHERE
k.url = s.url AND k.server = s.server AND k.mask='y'
ORDER BY k.time
DESC
LIMIT 0, 10

т.е. из 2-х таблиц, в каждой менее 4000 записей, но запрос выполняется 3 секунды.

Прочитал несколько похожих тем, но не очень понял, как решить проблему.
Может в запросе я что-то делаю не так? Но ведь мелкие таблицы.
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810342
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите DDL таблиц и план запроса.
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810426
VladRost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
id select_type table partitions type possible_keys key key_len ref rows filtered Extra1 SIMPLE s NULL ALL NULL NULL NULL NULL 3342 100.00 Using temporary; Using filesort1 SIMPLE k NULL ALL NULL NULL NULL NULL 3840 0.10 Using where; Using join buffer (Block Nested Loop)

Что такое DDL не знаю :(
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810429
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladRostЧто такое DDL не знаю :( SHOW CREATE TABLE tbl_name
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810430
VladRost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table nstat25 (
    id int not null auto_increment,
    ip varchar (15),
    time int(10) ,
    unik varchar (25),
    email varchar (255),
    agent varchar (255),
    language varchar (10),
    name varchar (30),
    server varchar (100),
    url varchar (255),
    mask char (2) default 'y',	
    ocenka int (1),
    text text,
        primary  key (id)   )

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create table nstat15 (
    id int not null auto_increment,
    first int(10) ,
    last int(10) ,
    zagol varchar (255),
    server varchar (100),
    url varchar (255),
    vsoc int (10) default 0,
    sroc int (10) default 0,
    vccom int (10) default 0,
    vsego int (10) default 1,	
    mask char (2) default 'y',
        primary  key (id)   )
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810432
VladRost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nstat15
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE TABLE `nstat15` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `first` int(10) DEFAULT NULL,
  `last` int(10) DEFAULT NULL,
  `zagol` varchar(255) DEFAULT NULL,
  `server` varchar(100) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `vsoc` int(10) DEFAULT '0',
  `sroc` int(10) DEFAULT '0',
  `vccom` int(10) DEFAULT '0',
  `vsego` int(10) DEFAULT '1',
  `mask` char(2) DEFAULT 'y',
  `obr` int(100) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3358 DEFAULT CHARSET=utf8


nstat25
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TABLE `nstat25` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) DEFAULT NULL,
  `time` int(10) DEFAULT NULL,
  `unik` varchar(25) DEFAULT NULL,
  `email` varchar(255) DEFAULT NULL,
  `agent` varchar(255) DEFAULT NULL,
  `language` varchar(10) DEFAULT NULL,
  `name` varchar(30) DEFAULT NULL,
  `server` varchar(100) DEFAULT NULL,
  `url` varchar(255) DEFAULT NULL,
  `mask` char(2) DEFAULT 'y',
  `ocenka` int(1) DEFAULT NULL,
  `text` text,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=3907 DEFAULT CHARSET=utf8
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810433
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s.url, s.server - какое-то из этих двух полей надо проиндексировать, или даже оба - зависит от их селективности.

Существует ли гарантия, что для каждой записи из таблицы nstat25 найдется хотя бы одна запись в таблице nstat15 ?
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810446
VladRost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksofts.url, s.server - какое-то из этих двух полей надо проиндексировать, или даже оба - зависит от их селективности.


Но ведь маленькие таблицы же. Без индексирования никак?

miksoftСуществует ли гарантия, что для каждой записи из таблицы nstat25 найдется хотя бы одна запись в таблице nstat15 ?

По идее да - соответствие должно быть.
В принципе server + url в nstat15 - уникальное сочетание, можно в nstat25 вместо них использовать ссылку на ID из nstat15.
Так будет быстрее?
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810460
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladRostНо ведь маленькие таблицы же. Без индексирования никак?Сравните 4000*4000 и 4000*log 2 4000
Примерно в 300 раз разница.
Другими способами добиться такой разницы если и возможно, то крайне затратно.
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810461
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladRostПо идее да - соответствие должно быть."По идее" тут не годится - нужна гарантия. Если гарантия есть, то можно отбор записей по ORDER BY k.time DESC LIMIT 0, 10 выполнить до джойна и тогда вместо 4000 записей из первой таблицы в джойн пойдет только 10 - 400 раз разницы.
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810462
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladRostможно в nstat25 вместо них использовать ссылку на ID из nstat15.Сравнение одного числового поля, конечно, будет быстрее, чем двух строковых.
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810500
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нормализуйте данные. Связывание по VARCHAR сродни бреду.
...
Рейтинг: 0 / 0
Долгий простой запрос из небольшого количества записей.
    #39810572
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VladRostid select_type table partitions type possible_keys key key_len ref rows filtered Extra1 SIMPLE s NULL ALL NULL NULL NULL NULL 3342 100.00 Using temporary; Using filesort1 SIMPLE k NULL ALL NULL NULL NULL NULL 3840 0.10 Using where; Using join buffer (Block Nested Loop)

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


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