php - 为什么这个 SQL 查询会杀死我的服务器?

标签 php sql-server ajax query-optimization varnish

当我从 Varnish 缓存服务器在 SQL 服务器上运行此查询时。

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 行。

它会杀死服务器。它是通过 ajax 从 php 脚本调用的。我必须关闭调用它的页面。

我不知道它返回什么,但我知道我想做的事情应该用 group by 和having 创建,但我不知道如何创建。

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 中进行选择,而不指定联接子句,嵌套查询中的 where 不会停止全表联接...

关于php - 为什么这个 SQL 查询会杀死我的服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5325195/

相关文章:

php - 如何在数组中查找找到的 id 的索引

javascript - 根据 SQL 值更改 css

php - WordPress - get_avatar 添加自定义类

sql - 查看列是否有 varchar 20

javascript/css/php/mysql 在网站的div中收集用户邮箱地址

javascript - 使用ajax在悬停时调用一个php变量

sql-server - 如果目标重新启动,则不会发送 Service Broker 消息

sql-server - 在 SQL Server 中为 View 添加常量可更新列

php - 如何使用 JQUERY 设置复选框选中和未选中事件

jquery - 通过 Jquery 和 ASP.NET 进行 Ajax