powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорить ORDER BY
20 сообщений из 20, страница 1 из 1
Ускорить ORDER BY
    #33425734
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте,

Можно ли ускорить работу ORDER BY. Ситуация такова, при обычной выборке, запрос выполняется быстро, а как только включаешь сортировку, начинаются тормоза, до 5-и секунд. В таблице всего то 0.5 млн записей пока, ну каждый день добавляются 3-4 тыщ.

Сам запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT craigs.id AS postid, craigs.priority, title, cities.city,
states.statecode, date, area, subarea, craigs.state AS poststate,
craigs.city AS postcity, SUBSTRING(body,  1 ,  200 ) AS body
FROM craigs
LEFT JOIN states ON craigs.state=states.statecode
LEFT JOIN cities ON craigs.city=cities.id WHERE craigs.category='rfs' AND states.abbreviation='dc' 
ORDER BY priority DESC, date DESC
EXPLAIN запроса:
tabletypepossible_keyskeykey_lenrefrowsExtra statesconstPRIMARY abbreviationabbreviation2const1Using filesort craigsrefcategorycategory20const376422Using where citieseq_refPRIMARYPRIMARY4craigs.city1

-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426094
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите описание таблиц заодно, иначе сложно чего-то сказать
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426101
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот все три таблицы ...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
-- 
-- Table structure for table `cities`
-- 

CREATE TABLE `cities` (
  `id` int( 11 ) NOT NULL default '0',
  `city` varchar( 100 ) NOT NULL default '',
  `statecode` int( 11 ) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

-- --------------------------------------------------------

-- 
-- Table structure for table `craigs`
-- 

CREATE TABLE `craigs` (
  `id` int( 11 ) NOT NULL auto_increment,
  `craigid` int( 11 ) NOT NULL default '0',
  `url` varchar( 100 ) NOT NULL default '',
  `area` varchar( 20 ) NOT NULL default '',
  `category` varchar( 20 ) NOT NULL default '',
  `title` varchar( 255 ) NOT NULL default '',
  `body` text NOT NULL,
  `subarea` varchar( 200 ) NOT NULL default '',
  `state` int( 11 ) NOT NULL default '0',
  `city` int( 11 ) NOT NULL default '0',
  `email` varchar( 100 ) NOT NULL default '',
  `price` int( 11 ) NOT NULL default '0',
  `date` int( 11 ) NOT NULL default '0',
  `priority` tinyint( 4 ) NOT NULL default '0',
  `arid` int( 11 ) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `craigid` (`craigid`),
  KEY `category` (`category`),
  FULLTEXT KEY `body` (`body`),
  FULLTEXT KEY `subarea` (`subarea`),
  FULLTEXT KEY `title` (`title`)
) TYPE=MyISAM AUTO_INCREMENT= 565035  ;

-- --------------------------------------------------------

-- 
-- Table structure for table `states`
-- 

CREATE TABLE `states` (
  `statecode` smallint( 6 ) NOT NULL default '0',
  `abbreviation` char( 2 ) NOT NULL default '',
  `state` varchar( 100 ) NOT NULL default '',
  PRIMARY KEY  (`statecode`),
  UNIQUE KEY `abbreviation` (`abbreviation`)
) TYPE=MyISAM;
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426121
Steven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи EXPLAIN запроса без сортировки.

------------
Пути мои - неисповедимы.
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426138
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
индекс по полю date?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426188
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Steven13Покажи EXPLAIN запроса без сортировки.

------------
Пути мои - неисповедимы.
Результат EXPLAIN такой же, только отсутствует Using filesort для таблицы states

>>индекс по полю date?
А может помочь? Просто я не могу залочить таблицу на долго, сайт то посещаемый ...
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426224
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идее - должно... Вы же сортируете по этому полю.... Хотя, подождите пока дадут ответ более компетентные люди.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426233
Steven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй поставить индексы на :
craigs.state

craigs.city


Я недавно 2 десятка скриптов индексами снабжал. Так постановка индексов на поля по которым идёт JOIN ускоряло их оброботку на порядок, иногда и больше.


----------
Пути мои - неисповедимы.
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426243
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, завтра попробую. Результаты выложу обязательно.
-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33426324
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Модифицируйте индекс category до KEY `category` (`category`, `date`), должно помочь в сортировке.
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33427554
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индекс по полю date не помогло ...

>>Модифицируйте индекс category до KEY `category` (`category`, `date`), должно помочь в сортировке.

Это как? Т.е. уникальным сделать? не получится, ведь они могут повторятья ...
Сейчас ставлю индексы на craigs.state и craigs.city ... посмотрим что получится, долго млин ...
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33427858
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://dev.mysql.com/doc/refman/4.1/en/order-by-optimization.html
manThe following queries use the index to resolve the ORDER BY part:
Код: plaintext
1.
SELECT * FROM t1 
    ORDER BY key_part1 DESC, key_part2 DESC;
попробуй создать index (`priority`,`date`)
авторА может помочь? Просто я не могу залочить таблицу на долго, сайт то посещаемый ...для этого есть таблица test :)
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33427879
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хмм... если тормоза появляются только при сортировке и иксплейн почти такой же, то джойны мешать не должны вроде...
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33427920
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maXmoхмм... если тормоза появляются только при сортировке и иксплейн почти такой же, то джойны мешать не должны вроде...
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
Проверил, джойны вообще погоду не делают.
Сейчас пробую как раз
Код: plaintext
1.
SELECT * FROM t1 
    ORDER BY key_part1 DESC, key_part2 DESC;
Судя по мануалу, должно помочь...
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33427954
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VERSИндекс по полю date не помогло ...

>>Модифицируйте индекс category до KEY `category` (`category`, `date`), должно помочь в сортировке.

Это как? Т.е. уникальным сделать? не получится, ведь они могут повторятья ...
Сейчас ставлю индексы на craigs.state и craigs.city ... посмотрим что получится, долго млин ...
Ну что значит "как"? Вместо индекса по полю category сделать индекс по полю category и date.
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33428024
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DocAl VERSИндекс по полю date не помогло ...

>>Модифицируйте индекс category до KEY `category` (`category`, `date`), должно помочь в сортировке.

Это как? Т.е. уникальным сделать? не получится, ведь они могут повторятья ...
Сейчас ставлю индексы на craigs.state и craigs.city ... посмотрим что получится, долго млин ...
Ну что значит "как"? Вместо индекса по полю category сделать индекс по полю category и date.
Здесь меня просто смутило слово KEY, насколько я понимаю, КЕЙ это уникальное поле ... поправтье если я не прав.
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33428068
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KEY значит KEY, ключ, индекс.
VERS
KEY `category` (`category`),

Это, собственно, из описания таблицы цитата.
Вот этот индекс надо заменить на индекс по полям category, date, именно в таком порядке.
Собственно, судя по предопоследнему вашему посту, вы как раз на этом пути сейчас.
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33428151
VERS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свершилось!)))
Спасибо всем огромное.
Добавив индекс KEY `date` (`date`,`priority`) получаем сортировку в 4-5 раз быстрее чем было.
-------------------------------
www.free-lancer.ru
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33428182
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эк меня переклинило... priority, конечно, а не category.
Вот только, по идее, надо KEY `priority` (`priority`, `date`)
...
Рейтинг: 0 / 0
Ускорить ORDER BY
    #33429143
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точно, должно быть KEY (`priority`, `date`), иначе ускорения не будет.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорить ORDER BY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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