Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Ускорить ORDER BY / 20 сообщений из 20, страница 1 из 1
08.12.2005, 17:21:42
    #33425734
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
Здравствуйте,

Можно ли ускорить работу 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
08.12.2005, 20:36:27
    #33426094
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
Покажите описание таблиц заодно, иначе сложно чего-то сказать
...
Рейтинг: 0 / 0
08.12.2005, 20:43:02
    #33426101
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
Вот все три таблицы ...
Код: 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
08.12.2005, 21:09:58
    #33426121
Steven13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
Покажи EXPLAIN запроса без сортировки.

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

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

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

craigs.city


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


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

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

Это как? Т.е. уникальным сделать? не получится, ведь они могут повторятья ...
Сейчас ставлю индексы на craigs.state и craigs.city ... посмотрим что получится, долго млин ...
...
Рейтинг: 0 / 0
09.12.2005, 16:18:36
    #33427858
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
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
09.12.2005, 16:23:15
    #33427879
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
хмм... если тормоза появляются только при сортировке и иксплейн почти такой же, то джойны мешать не должны вроде...
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
09.12.2005, 16:33:48
    #33427920
VERS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
maXmoхмм... если тормоза появляются только при сортировке и иксплейн почти такой же, то джойны мешать не должны вроде...
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
Проверил, джойны вообще погоду не делают.
Сейчас пробую как раз
Код: plaintext
1.
SELECT * FROM t1 
    ORDER BY key_part1 DESC, key_part2 DESC;
Судя по мануалу, должно помочь...
...
Рейтинг: 0 / 0
09.12.2005, 16:42:19
    #33427954
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить ORDER BY
VERSИндекс по полю date не помогло ...

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

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

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

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

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


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