与ci_sessions表相关的MySQL性能低下

时间:2012-05-02 03:20:32

标签: php mysql codeigniter

我在Codeigniter中构建了一个网络应用程序,该程序已经运行了大约一年,并且突然之间应用程序在一天中的某些时间变得极其缓慢。 (有时页面加载时间超过30秒)。我开始记录,结果发现一些查询运行得非常慢:

9.6776      SELECT * FROM (`ci_sessions`) WHERE `session_id` = 'f2f356fb32a4e65ad3eb18f5baa74cfb' AND `user_agent` = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:11' 
28.9770     UPDATE `ci_sessions` SET `last_activity` = '1335753561', `user_data` = 'a:7:{s:6:\"userID\";s:1:\"3\";s:12:\"userFullName\";s:15:\"Christian Varga\";s:5:\"admin\";s:1:\"1\";s:7:\"timeout\";s:5:\"86400\";s:12:\"lastActivity\";s:10:\"1335928202\";s:8:\"prev_url\";s:58:\"http://exampleurl.com\";s:8:\"loggedIn\";s:1:\"1\";}' WHERE `session_id` = 'f2f356fb32a4e65ad3eb18f5baa74cfb' 

我的想法是数据库服务器存在问题,因为有时这些完全相同的查询工作正常,然后其他时间它们都非常慢(如上所述)。但是我很快指出了这一点,所以我只是想在这里查看是否有人认为可能代码有问题,或者它看起来像服务器问题。

我对此有任何想法。

编辑:解释结果选择:

id  select_type   table         type    possible_keys       key         key_len     ref     rows    Extra
1   SIMPLE        ci_sessions   const   PRIMARY,user_agent  PRIMARY     122         const   1 

1 个答案:

答案 0 :(得分:8)

session_iduser_agent上添加多列索引。然后,即使您有数百万行,也不应该花费任何实际的时间来执行查询。