Почему этот запрос SQL убивает мой сервер?
-
25-10-2019 - |
Вопрос
Когда я запускаю этот запрос на SQL Server с сервера ваша.
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
Кто -нибудь может сказать мне, насколько плохой запрос и что он возвращает?
Решение
Вы выбираете как из AIKI_USER, так и из OCAL_FILES в основном запросе, не указав пункт об объединении, где в вложенном запросе не останавливает полное соединение таблицы ...
Другие советы
Я бы порекомендовал запустить план объяснения обоих запросов и посмотреть, что вам говорит база данных.
Я предполагаю, что вы должны сделать сканирование стола, поэтому производительность ужасна.