Почему этот SQL-запрос убивает мой сервер? - PullRequest
2 голосов
/ 16 марта 2011

Когда я запускаю этот запрос на сервере SQL с сервера кэша Varnish.

select count(distinct email) from aiki_users, ocal_files where userid = 
       (select upload_user from ocal_files where upload_user = userid limit 1)

С таблицей aiki_users, имеющей> 80000 строк

и таблицей ocal_files, имеющей> 30000ряды.

убивает сервер.Он вызывается из php-скрипта через ajax.Я должен закрыть страницу, которая вызывает его.

Я не знаю, что он возвращает, но я знаю, что то, что я хочу сделать, должно быть создано с помощью группы и наличия, но я не знаюкак.

Таблица aiki_users выглядит следующим образом:

CREATE TABLE IF NOT EXISTS `aiki_users` (
  `userid` int(9) unsigned NOT NULL auto_increment,
  `username` varchar(100) NOT NULL default '',
  `full_name` varchar(255) NOT NULL,
  `country` varchar(255) NOT NULL,
  `sex` varchar(25) NOT NULL,
  `job` varchar(255) NOT NULL,
  `password` varchar(100) NOT NULL default '',
  `oauth_passcode` varchar(255) NOT NULL,
  `oauth_token` varchar(255) NOT NULL,
  `oauth_token_secret` varchar(255) NOT NULL,
  `usergroup` int(10) NOT NULL default '0',
  `email` varchar(100) NOT NULL default '',
  `avatar` varchar(255) NOT NULL,
  `homepage` varchar(100) NOT NULL default '',
  `first_ip` varchar(40) NOT NULL default '0',
  `first_login` datetime NOT NULL,
  `last_login` datetime NOT NULL,
  `last_ip` varchar(40) NOT NULL,
  `user_permissions` text NOT NULL,
  `maillist` int(1) NOT NULL,
  `logins_number` int(11) NOT NULL,
  `randkey` varchar(255) NOT NULL,
  `is_active` int(5) NOT NULL,
  PRIMARY KEY  (`userid`),
  KEY `username` (`username`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

У меня нет правильного доступа к серверу, я не вижу определение ocal_files, но:

 ocal_files.aiki_users = aiki_users.userid

Кто-нибудь может мне сказать, насколько плох запрос и что он возвращает?

Ответы [ 2 ]

4 голосов
/ 16 марта 2011

Вы выбираете как из aiki_user, так и из ocal_files в основном запросе, без указания предложения объединения, где положение во вложенном запросе не остановит полное соединение таблицы ...

0 голосов
/ 16 марта 2011

Я бы порекомендовал запустить EXPLAIN PLAN для обоих запросов и посмотреть, что говорит база данных.

Я предполагаю, что вы должны сделать TABLE SCAN, поэтому производительность ужасна.

...