mysql query LIKE '%%' sql 效能调优记录(二)

本文通过具体的MySQL查询案例,展示了使用LIKE '%%'进行模糊匹配时,相较于未使用LIKE的情况,其对数据库性能的影响。实验结果显示,带有LIKE '%%'的查询耗时明显增加,并且在执行计划中表现出全表扫描的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LIKE '%%'这种与不加like的过滤导致sql性能差别很大

 

mysql> select  com_id ,company.name,count(*) as albums_count from company_albums ,company
    -> where company_albums.com_id=company.id  AND company_albums.name LIKE '%%'
    -> group by company.name
    -> order by albums_count desc limit 31;

 

+--------+-----------------------+--------------+
| com_id | name                  | albums_count |
+--------+-----------------------+--------------+
------

31 rows in set (4.41 sec)


mysql> explain select  com_id ,company.name,count(*) as albums_count from company_albums ,company
    -> where company_albums.com_id=company.id  AND company_albums.name LIKE '%%'
    -> group by company.name
    -> order by albums_count desc limit 31;
+----+-------------+----------------+--------+---------------+---------+---------+------------------------------------+-------+----------------------------------------------+
| id | select_type | table          | type   | possible_keys | key     | key_len | ref                                | rows  | Extra                                        |
+----+-------------+----------------+--------+---------------+---------+---------+------------------------------------+-------+----------------------------------------------+
|  1 | SIMPLE      | company_albums | ALL    | com_idx       | NULL    | NULL    | NULL                               | 72441 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | company        | eq_ref | PRIMARY       | PRIMARY | 4       | test_01.company_albums.com_id |     1 |                                              |
+----+-------------+----------------+--------+---------------+---------+---------+------------------------------------+-------+----------------------------------------------+
2 rows in set (0.00 sec)

 

mysql> select  com_id ,company.name,count(*) as albums_count from company_albums ,company where company_albums.com_id=company.id  group by company.name order by albums_count desc limit 31;
+--------+-----------------------+--------------+
| com_id | name                  | albums_count |
+--------+-----------------------+--------------+
------

31 rows in set (0.08 sec)

 

<%@page contentType="text/html" pageEncoding="UTF-8"%><%@ page language="java" import="java.sql.*"%><!DOCTYPE html><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>学生信息查询</title></head><body bgcolor="CCCFFF" align="center"> <br> <table border="2" bgcolor="CCCEEE" width="600" align="center"> <tr bgcolor="CCCCCC" align="center"> <th>记录条数</th> <th>学号</th> <th>姓名</th> <th>性别</th> <th>年龄</th> <th>体重</th> </tr> <% Connection conn = null; ResultSet rs = null; Statement stmt = null; String sDBDriver = "com.mysql.jdbc.Driver"; String sConnStr = "jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf-8"; String username = "root"; String password = "bl"; int count=0; //2 装载驱动程序 try { Class.forName(sDBDriver); } catch (ClassNotFoundException ex) { System.err.println(ex.getMessage()); } try { //3 建立数据库连接 conn = DriverManager.getConnection(sConnStr, username, password); //4 创建Statement对象 stmt = conn.createStatement(); //5 执行sql语句 String sql = "select * from stu;"; rs = stmt.executeQuery(sql); //6 处理结果 //6 处理结果 if (rs != null) { count = 0; while (rs.next()) { count++; int id = rs.getInt("id"); String uname = rs.getString("name"); String sex = rs.getString("sex"); int age = rs.getInt("age"); double weight = rs.getDouble("weight"); %> <tr> <td><%=count%></td> <td><%=id%></td> <td><%=uname%></td> <td><%=sex%></td> <td><%=age%></td> <td><%=weight%></td> </tr> <% } } } catch (SQLException e1) { out.println(e1); } finally { //7 关闭链接 conn.close(); } %> </table> 你要查询的学生数据表中共有<%=count%> <font size="5" color="red"> </font>人</body></html>
最新发布
05-14
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值