SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.05.2015 16:15:09

mr.Lindon
Участник
Зарегистрирован: 27.05.2015
Сообщений: 1

Ускорить обработку запросов к базе, таблица 800 млн. записей

Привет! Есть таблица в базе MySQL - 800 млн. записей.
Необходимо, чтобы запросы Select,Update,Insert выполнялись (максимум несколько секунд), сейчас каждый занимает несколько  минут.
Запросы:

Select ID,data From  tbl_data Where status=0 AND checked=0 Limit 0,1000
Update tbl_data Set status=2,date_handled='$curr_date_time' Where ID IN($IdList)
Update tbl_data Set status=0 Where status=2 AND HOUR(TIMEDIFF('$curr_date_time', date_handled)) >= 25
Insert Into tbl_data Set data='$data'

CREATE TABLE `tbl_data` (
  `ID` int(10) unsigned NOT NULL auto_increment,
  `data` varchar(250) NOT NULL,
  `checked` tinyint(1) NOT NULL default '0',
  `status` int(11) NOT NULL default '0',
  `date_handled` datetime NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `ID` (`ID`),
  KEY `combined` (`checked`,`status`),
  FULLTEXT KEY `domain_fulltext_index` (`data`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Неактивен

 

#2 27.05.2015 16:27:37

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Ускорить обработку запросов к базе, таблица 800 млн. записей

Как выглядит EXPLAIN для первого запроса?

Неактивен

 

#3 27.05.2015 20:39:29

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ускорить обработку запросов к базе, таблица 800 млн. записей

Ещё нужно удалить   UNIQUE KEY `ID` (`ID`),
сейчас у вас 2 одинаковых ключа на колонке id (один первичный, второй уникальный), а чем больше ключей, тем медленней операции insert, update, delete.

Неактивен

 

#4 27.05.2015 20:56:45

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Ускорить обработку запросов к базе, таблица 800 млн. записей

третий запрос нужно переписать как

Update tbl_data Set status=0 Where status=2 AND HOUR('$curr_date_time')-25 >= date_handled;

и добавить индекс (status,date_handled)

а сколько у вас выполняется
select 1;

и ещё сделайте
flush status;
ваши запросы;
SHOW STATUS like 'key%';

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson