Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация запроса\таблиц 
V
    Опции темы
fregs
Дата 22.11.2007, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



собираю несколькими запросами кол-во результатов поиска в нескольких разделах (1-10), по запросу на раздел,

имеем вот такой вот корявенький запрос
Код

SELECT count(fs_files.id) as c FROM fs_dirs,fs_files
WHERE fs_files.dirid=fs_dirs.dirid AND fs_dirs.fcount>0
AND fs_dirs.dirname LIKE '$sd%'
AND fs_files.filename LIKE '%$sSearch%'

получаем примерно 1-2 секунды на запрос


2 таблы
Код

CREATE TABLE IF NOT EXISTS `fs_dirs` (
`dirid` mediumint(8) NOT NULL auto_increment,
`dirname` varchar(255) NOT NULL default '',
`pid` mediumint(8) unsigned NOT NULL default '0',
`fcount` int(10) NOT NULL default '0',
PRIMARY KEY (`dirid`),
KEY `dirname` (`dirname`)
) ENGINE=MyISAM DEFAULT


Код

CREATE TABLE IF NOT EXISTS `fs_files` (
`id` mediumint(8) NOT NULL auto_increment,
`cat` enum('poly','pict','themes','javag','symb','video','javas','mophun') NOT NULL default 'poly',
`dirid` mediumint(8) unsigned NOT NULL default '0',
`filename` varchar(230) NOT NULL default '',
`ext` char(3) default NULL,
`md5` varchar(32) default NULL,
`fsize` int(10) unsigned NOT NULL default '0',
`mtime` int(10) unsigned NOT NULL default '0',
`rate` int(10) unsigned NOT NULL default '0',
`opt` smallint(4) unsigned NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `filename` (`filename`),
KEY `dirid` (`dirid`)
) ENGINE=MyISAM


fs_dirs 200 000 
fs_files 850 000 записей

куда бы копать в плане оптимизации? 

Это сообщение отредактировал(а) fregs - 22.11.2007, 02:36
PM MAIL WWW   Вверх
skyboy
Дата 22.11.2007, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



моделируешь файловую систему?
а жесткие ссылки планируются? или структура представляет собой "чистое" дерево?
Цитата(fregs @  22.11.2007,  01:27 Найти цитируемый пост)
SELECT count(fs_files.id)

Цитата(fregs @  22.11.2007,  01:27 Найти цитируемый пост)
`fcount` int(10) NOT NULL default '0',

ты количество файлов и запоминаешь в БД, и вычисляешь при каждом запросе?
PM MAIL   Вверх
fregs
Дата 22.11.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



Цитата(skyboy @  22.11.2007,  12:01 Найти цитируемый пост)
моделируешь файловую систему?
а жесткие ссылки планируются? или структура представляет собой "чистое" дерево?

1. да
2. чистое дерево
была некая файловая бд, файлы решили перенести на другой серв
поэтому был написан парсер который разбирает это дерево в несколько таблиц в мускул

Цитата(skyboy @  22.11.2007,  12:01 Найти цитируемый пост)
ты количество файлов и запоминаешь в БД, и вычисляешь при каждом запросе? 

запомнено только кол.-во файлов в папке

а в запросе который указан первым я вычисляю кол-во файлов в разделе удовлетворяющих условиям поиска
PM MAIL WWW   Вверх
skyboy
Дата 22.11.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



сделай 
Код

EXPLAIN SELECT count(fs_files.id) as c FROM fs_dirs,fs_files
WHERE fs_files.dirid=fs_dirs.dirid AND fs_dirs.fcount>0
AND fs_dirs.dirname LIKE '$sd%'
AND fs_files.filename LIKE '%$sSearch%'

и результат - сюда.
PM MAIL   Вверх
skyboy
Дата 22.11.2007, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260




M
skyboy
Тема намного ближе к MySQL, чем к PHP. Переношу...

PM MAIL   Вверх
fregs
Дата 22.11.2007, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



мда задача на засыпку... как бы вывести, чтобы читать можно было


id select_type table    type    
1    SIMPLE    fs_dirs    ALL    
1    SIMPLE    fs_files    ref    

possible_keys    
PRIMARY,dirname 
dirid

key    key_len
NULL    NULL    
dirid    3

ref
NULL
focs_download.fs_dirs.dirid

rows    Extra
99066    Using where
5    Using where
PM MAIL WWW   Вверх
skyboy
Дата 22.11.2007, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(fregs @  22.11.2007,  21:56 Найти цитируемый пост)
как бы вывести, чтобы читать можно было

вставил бы в цитату([ quote] ), автоперенос бы не сработал.
че-то мне кажется, что быстрее - никак. в столбце extra при применении explain отображаются потенциально узкие места: использование временных таблиц, дополнительная сортировка и т.д. У тебя же там ничего это нет. Только указание, что идет фильтрация по where. слушай, а если сделать полнотекстовый индекс? есть и функции для работы b конструкция create index для создания(правда, поддерживается только для таблиц MyISAM)
PM MAIL   Вверх
fregs
Дата 23.11.2007, 02:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



Цитата(skyboy @  22.11.2007,  23:11 Найти цитируемый пост)
вставил бы в цитату([ quote] ), автоперенос бы не сработал.

Экспериментировал... поля разной длины... смещаются сильно, неудобно

пробовал с полнотекстовым, выигрыша нету либо он очень мал и незаметен
похоже единственное что может дать результат
это изменение структуры таблицы fs_dirs
PM MAIL WWW   Вверх
skyboy
Дата 23.11.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



не мог бы сжатый, скажем, gzip'ом дамп таблиц скинуть?
PM MAIL   Вверх
Бонифаций
Дата 23.11.2007, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Цитата(fregs @  22.11.2007,  22:56 Найти цитируемый пост)
мда задача на засыпку... как бы вывести, чтобы читать можно было


Завершите запрос не по ; а по \G




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
fregs
Дата 25.11.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 25.11.2004

Репутация: нет
Всего: 1



Цитата(Бонифаций @  23.11.2007,  13:53 Найти цитируемый пост)
Завершите запрос не по ; а по \G

увы только пшпмайадмин, а там нет ыозможности сменить форматирование вывода


Цитата(skyboy @  23.11.2007,  10:44 Найти цитируемый пост)
не мог бы сжатый, скажем, gzip'ом дамп таблиц скинуть? 

и тут увы, база имеет коммерсческую ценность
да и много... 40 мб в архиве...

думаю тему можно закрыть, при следующей доработке по другому спланирую таблицы, это должно решить часть проблем



PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0830 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.