JAVA后台开发学习(5)

前几天遇到一个问题:就是mysql有一个表很是大,致使打开不了,前端页面没法显示表的相关信息。一开始这个接口不是我写的,我看了一下,之前的sql语句是这样子写的前端

ResultSet rs = stmt.executeQuery("select * from " + tableName);
ResultSetMetaData data = rs.getMetaData();
ResultSet primaryKeys = connection.getMetaData().getPrimaryKeys(dataSource.getSchema(), null, tableName);复制代码

获得每个字段的相关信息,而后把每个字段的信息set到column里:mysql

for (int i = 1; i <= data.getColumnCount(); i++) {
    Column column = new Column();
    column.setColumnName(data.getColumnLabel(i));
    column.setColumnType(data.getColumnTypeName(i));
    if(primaryKeysList.contains(data.getColumnLabel(i))){
        column.setPrimaryKey(true);
    }

    columns.add(column);
    column.setSequence(i);
}复制代码

这种方法,若是表是很小的话,查询花的时间确实不长。。可是遇到有几千条数据开始,就慢到极点。。。经受不起大考验。sql


为了找出打开表慢的缘由,我在这个方法打断点,发现是卡在执行sql语句的时候,而后咱们大佬给咱们发了一个sql语句,说这样执行会很快bash

select column_name from information_schema.columns where table_name='xxx';
复制代码

这个语句能查到每一个字段的名字,还有一些相关信息还没查到,我就把改为column_name改为*看能查到字段什么相关信息。post


关于字段的各类信息都有了。。ui

最后把代码改为:spa

ResultSet rs = stmt.executeQuery("select column_name , data_type , column_key from information_schema.columns where table_name='" + tableName + "'");
int i=0;
while (rs.next()) {
    Column column = new Column();
    column.setColumnName(rs.getString(1));
    column.setColumnType(rs.getString(2));
    if (rs.getString(3).equalsIgnoreCase("pri"))
        column.setPrimaryKey(true);
    columns.add(column);
    column.setSequence(++i);
}复制代码

用postman试了一下  速度确实是大大提升了呀,并且不须要把整张表都查出来!code

相关文章
相关标签/搜索