MySQL数据库的query查询时间往往取决于【是否建立索引】、【数据量多寡】、【query查询的方法】…等,然而【是否建立索引】的因素却是影响query查询时间最重要的因素之一。
举个例子:如果你的Table(User)中有一个name的字段,当你要查询姓氏为’林’的使用者,通常你会这样下SQL语法
SELECT * FROM User WHERE name like ‘%林%’;
如此,一般而言你会将name这个字段加入index索引中,否则当数据量大时,query时间的快慢就会明显出现差异了。
当完成了一个网站后,程序中针对MySQL查询(query)的次数那么多,那要如何找出query查询时间较长的语法呢?其实在my.cnf设定档中(一般在/etc/my.cnf),已经提供了参数可以直接产生log记录档案,让管理者可以很清楚了解到那些查询(query)的语法花费较多的时间。
请在my.cnf设定文件中,找到[mysqld]卷标,在此卷标下面加上:
log-slow-queries = /path/slow-query.log #slow query记录文件的路储存路径
long_query_time = 2 #query超过2秒时,则会记录
log-queries-not-using-indexes #没有索引的记录,则会记录
设定完成my.cnf后,请记得要重新启动MySQL
其中,log-slow-queries记录文件的储存路径,这个目录一定要是mysql使用者可以写入权限的位置,因为slow-query.log记录文件是由mysql使用者去执行写入;否则,会造成记录档案无法产生的情况,这个问题是最常发生,请切记!