|
|
|
|
|
для: Nuk79
(14.04.2008 в 11:10)
| | Волшебство!
Переделал все заджойненные поля и всё "волшебным образом" стало работать на порядок быстрее. Нагрузка на проц уменьшилась в разы.
Спасибо за совет. Думаю дальше убыстрять смысла нет - и так всё летает. | |
|
|
|
|
|
|
|
для: mechanic
(11.04.2008 в 22:36)
| | Думаю избавиться от текстовых джойнов возможно, а вот поменять структуру запроса нет. Начну именно с изменения присоединённых таблиц - дальше будет видно.
Explain покажу попозже ;-) | |
|
|
|
|
|
|
|
для: Nuk79
(11.04.2008 в 17:13)
| | ууу... а говоришь "выборка из таблицы где всего 7000 записей", а джойны в таком количестве это так, фигня? оптимизировать и еще раз оптимизировать..
замечание номер раз - джойнится таблицы должны по ключам в идеале.. т.е. если пишешь from table 1 left join table2 on table1.fld = table2.fld, то table2.fld хорошо если является ключом
номер два - ключи должны быть числовыми идентификаторами
а то я смотрю тут джойны по fio_worker которое явно текстовое..
вообще тут по-хорошему все переделать надо
а еще интересно поглядеть на explain этого запроса ) | |
|
|
|
|
|
|
|
для: mechanic
(11.04.2008 в 16:00)
| | SELECT `list`.`id_record`, `list`.`user_id`, `list`.`reception_way`, `list`.`reception_date`, `list`.`application_number`, `granting_puproses__1`.`granting_puprose` AS `granting_puproses__granting_puprose__1`, `list`.`address`, `list`.`cadastral_number`, `list`.`fio_applicant`, `list`.`sending_date_from_ro`, `list`.`reception_date_in_ca`, `list`.`transfer_date_to_work`, `fio_workers__1`.`fio_worker` AS `fio_workers__fio_worker__1`, `list`.`control_date`, `fio_controllers__1`.`controller` AS `fio_controllers__controller__1`, `list`.`to_rosned_date`, `gku_results__1`.`gku_result` AS `gku_results__gku_result__1`, `list`.`reg_num_solve`, `list`.`return_date`, `list`.`transfer_to_uchet_date`, `list`.`transfer_to_print_date`, `list`.`transfer_to_final_control_date`, `fio_controllers__2`.`controller` AS `fio_controllers__controller__2`, `list`.`service_marks`, `list`.`transfer_to_oo_date`, `list`.`sending_date_from_ca`, `list`.`reception_date_in_to`, `list`.`return_on_completion`, `list`.`reception_date_to_out`, `list`.`out_date`, `list`.`return_after_pause_date`, `list`.`_transfer_date_to_work`, `fio_workers__2`.`fio_worker` AS `fio_workers__fio_worker__2`, `list`.`_control_date`, `fio_controllers__3`.`controller` AS `fio_controllers__controller__3`, `list`.`_to_rosned_date`, `gku_results__2`.`gku_result` AS `gku_results__gku_result__2`, `list`.`_reg_num_solve`, `list`.`_return_date`, `list`.`_transfer_to_uchet_date`, `list`.`_transfer_to_print_date`, `list`.`_transfer_to_final_control_date`, `fio_controllers__4`.`controller` AS `fio_controllers__controller__4`, `list`.`_service_marks`, `list`.`_transfer_to_oo_date`, `list`.`_sending_date_from_ca`, `list`.`_reception_date_in_to`, `list`.`_return_on_completion`, `list`.`_reception_date_to_out`, `list`.`_out_date`, `list`.`date_of_receipt_in_archive` FROM `list` LEFT JOIN `granting_puproses` AS `granting_puproses__1` ON `list`.`granting_puprose` = `granting_puproses__1`.`granting_puprose` LEFT JOIN `fio_workers` AS `fio_workers__1` ON `list`.`fio` = `fio_workers__1`.`fio_worker` LEFT JOIN `fio_controllers` AS `fio_controllers__1` ON `list`.`controller` = `fio_controllers__1`.`controller` LEFT JOIN `gku_results` AS `gku_results__1` ON `list`.`gku_result` = `gku_results__1`.`gku_result` LEFT JOIN `fio_controllers` AS `fio_controllers__2` ON `list`.`final_controller` = `fio_controllers__2`.`controller` LEFT JOIN `fio_workers` AS `fio_workers__2` ON `list`.`_fio` = `fio_workers__2`.`fio_worker` LEFT JOIN `fio_controllers` AS `fio_controllers__3` ON `list`.`_controller` = `fio_controllers__3`.`controller` LEFT JOIN `gku_results` AS `gku_results__2` ON `list`.`_gku_result` = `gku_results__2`.`gku_result` LEFT JOIN `fio_controllers` AS `fio_controllers__4` ON `list`.`_final_controller` = `fio_controllers__4`.`controller` ORDER BY `list`.`id_record` ASC LIMIT 900,100 | |
|
|
|
|
|
|
|
для: Nuk79
(11.04.2008 в 14:31)
| | show full processlist;
я уже вижу простор для создания ключей ) | |
|
|
|
|
|
|
|
для: mechanic
(11.04.2008 в 11:35)
| | list | CREATE TABLE `list` (
`id_record` int(11) NOT NULL auto_increment,
`updater` varchar(20) NOT NULL,
`user_id` varchar(20) NOT NULL,
`reception_way` varchar(50) NOT NULL,
`reception_date` date NOT NULL,
`application_number` varchar(50) NOT NULL,
`granting_puprose` varchar(50) NOT NULL,
`address` varchar(100) NOT NULL,
`cadastral_number` varchar(50) NOT NULL,
`fio_applicant` varchar(100) NOT NULL,
`sending_date_from_ro` date default NULL,
`reception_date_in_ca` date NOT NULL,
`transfer_date_to_work` date NOT NULL,
`fio` varchar(100) NOT NULL,
`to_rosned_date` date NOT NULL,
`gku_result` varchar(15) NOT NULL,
`reg_num_solve` varchar(50) NOT NULL,
`return_date` date NOT NULL,
`transfer_to_uchet_date` date NOT NULL,
`transfer_to_print_date` date NOT NULL,
`transfer_to_final_control_date` date NOT NULL,
`final_controller` varchar(100) NOT NULL,
`control_date` date NOT NULL,
`controller` varchar(100) NOT NULL,
`service_marks` varchar(150) NOT NULL,
`transfer_to_oo_date` date NOT NULL,
`sending_date_from_ca` date NOT NULL,
`reception_date_in_to` date NOT NULL,
`return_on_completion` date NOT NULL,
`reception_date_to_out` date NOT NULL,
`out_date` date NOT NULL,
`return_after_pause_date` date NOT NULL,
`date_of_receipt_in_archive` date NOT NULL,
`_transfer_date_to_work` date NOT NULL,
`_fio` varchar(100) NOT NULL,
`_to_rosned_date` date NOT NULL,
`_gku_result` varchar(15) NOT NULL,
`_reg_num_solve` varchar(50) NOT NULL,
`_return_date` date NOT NULL,
`_transfer_to_uchet_date` date NOT NULL,
`_transfer_to_print_date` date NOT NULL,
`_transfer_to_final_control_date` date NOT NULL,
`_final_controller` varchar(100) NOT NULL,
`_control_date` date NOT NULL,
`_controller` varchar(100) NOT NULL,
`_service_marks` varchar(150) NOT NULL,
`_transfer_to_oo_date` date NOT NULL,
`_sending_date_from_ca` date NOT NULL,
`_reception_date_in_to` date NOT NULL,
`_return_on_completion` date NOT NULL,
`_reception_date_to_out` date NOT NULL,
`_out_date` date NOT NULL,
PRIMARY KEY (`id_record`),
UNIQUE KEY `application_number` (`application_number`)
) ENGINE=MyISAM AUTO_INCREMENT=31273 DEFAULT CHARSET=cp1251 |
show processlist выдаёт не весь запрос, как посмотреть его целиком? | |
|
|
|
|
|
|
|
для: Nuk79
(11.04.2008 в 11:29)
| | show create table.. и сам запрос - в студию!
хотя всего 7000 записей, да на таком сервере должно влет выбираться | |
|
|
|
|
|
|
| Имею MySQL 5.0.45 на линуксовом серваке, сервак - двухголовый ксеон с тремя гигами оперативы. В my.conf все раскручено по максимуму (настройки производительности самого мускула).
Выборка из таблицы, в которой всего 7000 записей происходит в течение 10 секунд!
Мониторил запросы - обычный селект с перечислением всех (порядка 30) полей в таблице. Понятное дело индексы на все поля не поставишь. Куда рыть в таком случае? | |
|
|
| |
|