在使用MySQL库对我的CodeIgniter3数据库进行简单查询时,我遇到了一个问题。我面临的问题,发现瓶颈,并希望听到您的意见。
技术规范:
表“通知”:
+-------------+--------------+------+-----+------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| receiver_id | int(11) | NO | MUL | 0 | |
| content | varchar(254) | NO | | NULL | |
| created | varchar(10) | NO | | 1000000000 | |
| seen | set('0','1') | NO | | 0 | |
+-------------+--------------+------+-----+------------+----------------+
5 rows in set (0.01 sec)来自mysql内部的直接查询:
mysql> select * from notifications order by created desc limit 100;
...
...
100 rows in set (0.01 sec)CodeIgniter:查询
// Load User's Notifications
public function LoadNotifications($UserID)
{
// Load Replies
$sql = "SELECT id, content, created, seen FROM notifications WHERE receiver_id=$UserID ORDER BY created DESC LIMIT 100";
$query = $this->db->query($sql);
if( $query->num_rows() == 0 ) return '0';
$results = $query->result_array();
return $results;
}我的观察和长期试图找出原因表明,这条线造成了问题:
$results = $query->result_array();CodeIgniter提供了另一种作为对象获取结果的方法,即使用以下命令:
$results = $query->result();正如您可能已经猜到的,PHP占用了HTTP/1.1 504的所有CPU和NginX连接超时,我得到了同样的结果。

请让我知道你的想法,我应该在哪里寻找,也许我到底应该寻找什么。我想大声疾呼,这是一个CodeIgniter错误,但按照协议,需要第二个意见,然后我这样做。
提前感谢
发布于 2016-12-18 04:28:18
答案
看来问题根本不在MySQL方面,而且证据是,我可以在毫秒内查询任意数量的行。
在function LoadNotifications($UserID)返回结果之后,当CodeIgniter实际呈现返回的$results数组时,我有如下所示的javascript行:
foreach($results as $notification)
{
echo $notification["content"] . "<br />";
echo "<script> some JS code </script>";
}这个问题是由我使用的内联Javascript混淆库缩微器造成的,它导致同时启动100个混淆实例,以混淆我在循环中拥有的100个<script>行。
底线:
如果您正在使用任何类型的内联PHP解析,例如,可以混淆您的代码或将其传递给第三方软件,那么在返回结果或呈现代码时,请确保不将其包含在中。
正确的方法是生成一个您拥有的数组的输出,退出该循环,然后将最后的输出用于模糊处理或在单个实例中所做的任何操作。
谢谢你,齐德福克斯和丹,你帮我的忙。
发布于 2016-12-19 00:06:41
对于第一个查询,需要在created上建立索引。您可能需要将该列转换为数字数据类型,而不是VARCHAR。
对于第二个查询,您需要一个不同的索引,即复合INDEX(receiver_id, created)。您当前的INDEX(receiver_id)不太好。由于它是我推荐的前缀,我建议您移除您的。
https://stackoverflow.com/questions/41205038
复制相似问题