如何利用MySQL数据库命令查看SQL执行效率

如何利用MySQL数据库命令查看SQL执行效率,第1张

1.找到mysql的安装路径,用记事本打开

my.ini

这个文件。

2.在这个文件中找到如下内容:

#path

to

the

database

root

datadir="c:/programdata/mysql/mysql

server

5.5/data/"

这里是你数据库

文件的存放路径,

如果你是要查看里面的内容,用数据库连接工具,或者命令行,通过

slelect

语句就可以查询了。

查看慢SQL是否启用,查看命令:show variables like 'log_slow_queries'

如果结果为ON则是开启了,如果为OFF则表示禁用了。

开启慢查询命令:set global log_slow_queries = on 

查看是否开启:show variables like 'log_slow_queries'

查看慢查询参数,即设置超过多少秒的查询归为了慢查询。参数为:long_query_time,查询命令: show global  variables like 'long_query_time'

mysql默认时间为10秒,即10秒及以上的查询被归为了慢查询。我们的实际项目中根本就不可能这么包容你,所以得提供查询效率优化sql,让程序更快的执行。

这里设置时间为1秒,即超过1秒就会被认为慢查询。设置命令:set global long_query_time =1用命令设置的,会立即生效,不用重启mysql服务。但重启mysql服务后就会失效。

查看设置的时间, show global variables like 'long_query_time'即可看到现在已经变为1秒了

查看慢查询存放日志,命令: show variables like 'slow_query_log_file'

去相应目录下查看即可。

需要将大量数据(大概5W条)插入MySQL数

据库,用普通的SQL

Statement执行,时间大概是几分钟。于是想到用PreparedStatement,但是改了之后发现效率并没有很大的提升。不成,想到了

load data local

infile...命令,以前一直认为这条命令仅限MySQL终端上使用而不是标准的SQL语句,今天看了几篇文章之后有了很大的收获。

1. 使用PreparedStatement batch operation

以前使用PreparedStatement性能没有很大提升的原因在于:

没有使用批处理方法

在语句执行之前应关闭事务自动提交,语句执行完之后再提交

public

void batchLoad(Connection connection)

{

try

{

connection.setAutoCommit(false)

BufferedReader reader =

new BufferedReader(new

FileReader("tfacts_result"))

String sqlString =

"insert into test(node1, node2, weight) values(?, ?, ?)"

PreparedStatement pstmt = connection.prepareStatement(sqlString)

String line =

null

while(true)

{

line = reader.readLine()

if(line == null)

{

break

}

String[] columns = line.split("\t")

for(int

i = 1i <= columns.lengthi++)

{

pstmt.setString(i, columns[i-1])

}

pstmt.addBatch()

}

pstmt.executeBatch()

connection.commit()

pstmt.close()

reader.close()

}

catch (FileNotFoundException e) {

e.printStackTrace()

}catch

(SQLException e){

e.printStackTrace()

}catch

(IOException e){

e.printStackTrace()

}

2.使用load data local infile into tabel XXX(注意在文件中用\t将每列数据隔开)

public

void loadData(Connection connection)

{

long

starTime = System.currentTimeMillis()

String sqlString =

"load data local infile ? into table test"

PreparedStatement pstmt

try

{

pstmt = connection.prepareStatement(sqlString)

pstmt.setString(1,

"tfacts_result")

pstmt.executeUpdate()

pstmt.close()

}

catch (SQLException e) {

e.printStackTrace()

}

long

endTime = System.currentTimeMillis()

System.out.println("program runs "

+ (endTime - starTime) + "ms")

}

测试了5W条数据,PreparedStatement耗时10s,而load data infile耗时3s。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7379067.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存