`
pan19849529
  • 浏览: 4847 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

mysql 查询 条件过滤机制是怎样的?

 
阅读更多
我有一条统计数据的SQL语句。情况就不说了,直接上句子吧(Mysql)!

优化前:
select count(u.ID) from USER_INFO u
where SUBSTRING(u.`REG_IP`)='10.0.1'
and u.REG_TIME >'2009-01-01'
and u.REG_TIME <='2009-12-30 23:59:59'
and SUBSTRING_INDEX(u.REG_IP,'.',-1)>=10
and SUBSTRING_INDEX(u.REG_IP,'.',-1)<=102

优化后:
select count(u.ID) from USER_INFO u
where u.`REG_IP` LIKE  '10.0.1%'
and u.REG_TIME >'2009-01-01'
and u.REG_TIME <='2009-12-30 23:59:59'
and SUBSTRING_INDEX(u.REG_IP,'.',-1)>=10
and SUBSTRING_INDEX(u.REG_IP,'.',-1)<=102

优化之后快了几千倍。有没有那位高手帮我解释一下其中的原因或者说Mysql的查询机制。

分享到:
评论
1 楼 魔力猫咪 2009-12-30  
SUBSTRING(u.`REG_IP`)的问题。
Mysql在遇到这种情况下是要全表扫描的,而你只是要一个count,当然慢了。MySQL目前还不支持函数索引,当发现查询的属性是函数的时候只能全表扫描。你用explain分析一下你的语句,看看Mysql给出的执行计划就知道为什么那么慢了。

相关推荐

    96 MySQL是如何根据成本优化选择执行计划的?(下).pdf

    选取驱动表后,MySQL会基于连接条件和额外的过滤条件查询其他表。例如,若t1和t2表需要基于t1.x1=t2.x1连接,并且还有其他过滤条件t2.x4=xxx和t2.x5=xxx,则MySQL会对t2表的全表扫描和基于x4、x5、x1字段的索引访问...

    高性能MySQL_ch04_查询性能优化.pdf

    - MySQL 5.6引入了索引下推功能,可以在索引遍历过程中过滤掉不符合条件的记录,进一步提高查询效率。 #### 五、其他高级优化技术 1. **分区** - 通过分区技术将大数据集分割成较小的部分,可以显著提高查询效率...

    mysql面试题50道和答案.docx

    MySQL 无法使用索引的情况包括使用不等于查询、列参与了数学运算或者函数、在字符串 like 时左边是通配符、当 MySQL 分析全表扫描比使用索引快的时候不使用索引、当使用联合索引,前面一个条件为范围查询,后面的...

    MySQL学习教程.zip

    学会使用WHERE子句进行条件筛选,以及GROUP BY、HAVING、ORDER BY、LIMIT等子句进行数据的分组、过滤和排序。 SQL查询是MySQL的核心,掌握复杂查询技巧至关重要。这包括JOIN操作(如INNER JOIN、LEFT JOIN、RIGHT ...

    深入解析:使用EXPLAIN优化MySQL查询之旅

    ### 深入解析:使用 EXPLAIN 优化 MySQL 查询之旅 #### 一、MySQL简介与特点 MySQL作为一款流行的开源关系型数据库管理系统(RDBMS),因其强大的功能与灵活性,在Web应用程序开发领域占据着举足轻重的地位。它不仅...

    mysql注入绕过技术

    针对这种威胁,许多开发者实施了过滤机制来防御潜在的SQL注入攻击。然而,正如Johannes Dahse在其2010年布拉格会议上的演讲中所展示的,即便是这些防御措施也可能被巧妙地绕过。本篇文章将深入探讨MySQL注入绕过技术...

    MySQL注入绕开过滤的技巧总结

    本篇文章主要探讨了如何在过滤机制存在的情况下,巧妙地绕过限制进行MySQL注入。 1. **空格替代** 当空格被过滤时,可以使用括号`()`来包围表达式,以达到分隔的作用。例如,原本的查询`select * from users where...

    Mysql查询优化器[文].pdf

    总的来说,MySQL查询优化器通过常量转化、无效条件过滤、常量计算、存取类型选择和范围查询优化等策略,提升查询性能。理解这些优化机制有助于我们编写更高效的SQL语句,从而充分利用数据库的性能。在实际开发中,...

    MySQL数据库面试宝典1.pdf

    - **WHERE**:用于过滤条件。 - **ORDER BY**:用于排序。 - **JOIN**:用于连接查询。 - **索引覆盖**:查询结果只需要索引即可获取,无需访问实际的数据行。 **4.4 索引有哪几种类型?** - **唯一索引**:索引列...

    mysql之Linux安装,重点是索引的优化笔记

    **ON**:根据连接条件过滤行。 3. **WHERE**:进一步过滤行。 4. **GROUP BY**:对结果进行分组。 5. **HAVING**:过滤分组结果。 6. **SELECT**:选择需要的列。 7. **DISTINCT**:去除重复项。 8. **ORDER ...

    php+mysql学生成绩查询-project.rar

    登录页面用于验证用户权限,查询页面允许用户输入查询条件,结果显示页面展示查询结果。 3. PHP与MySQL交互:使用PHP的MySQLi或PDO_MySQL扩展来连接数据库,执行SQL查询。例如,使用SELECT语句从数据库中获取数据,...

    mysql笔记.zip

    2. 查询数据:SELECT语句是SQL中最常用的,用于从表中检索数据,可以结合WHERE子句过滤结果,GROUP BY进行分组,HAVING过滤分组后的结果,ORDER BY进行排序,LIMIT限制返回的记录数。 3. 更新数据:UPDATE语句用于...

    php+mysql学生成绩查询.zip

    1. 用户界面:用户通过浏览器输入网址,向服务器发送请求,请求可能包括查询条件,如学号、姓名等。 2. PHP处理:服务器上的PHP脚本接收到请求后,解析参数,根据这些参数构造SQL查询语句。 3. 数据库交互:PHP通过...

    oracle数据库转mysql数据库免费工具

    3. **预览与过滤**:在迁移之前,用户可能需要预览转换结果,并可以设定条件过滤某些数据,只迁移需要的部分。 4. **映射管理**:Oracle和MySQL的数据类型可能存在差异,工具应能自动或手动进行数据类型的映射,以...

    mysql数据【mysql必知必会】pdf

    4. **数据操作**:深入理解如何在MySQL中进行数据的增删改查,例如使用WHERE子句筛选数据,使用ORDER BY进行排序,GROUP BY进行分组,以及HAVING子句进行条件过滤。 5. **事务处理**:MySQL支持ACID(原子性、一致...

    MySQL.rar_MYSQL_mysql 演示

    同时,`SELECT`语句是查询数据的核心,可以通过各种条件和操作符(如WHERE、GROUP BY、HAVING、ORDER BY等)来过滤和排序结果。 在数据库操作中,索引也是关键一环。MySQL允许为列创建索引以加速查询,例如,可以...

    mysql中文教程(pdf)C

    此外,还有JOIN操作用于合并来自多个表的数据,WHERE子句用于筛选条件,GROUP BY和HAVING用于分组和过滤聚合结果,以及ORDER BY用于排序结果。 存储过程和触发器是MySQL的高级特性,它们可以提升数据库的灵活性和...

    MySQL数据库考试题与答案.doc

    4. 条件用 WHERE 子句表达:在 MySQL 中,WHERE 子句用于指定查询条件。 5. 全文本搜索:在 MySQL 中,可以使用 CREATE TABLE 语句的 FULLTEXT 子句来启用全文本搜索。 6. 删除列:可以使用 ALTER TABLE 语句的 ...

    MYSQL必知必会的PDF书和源代码

    4. **查询技巧**:掌握使用WHERE子句进行条件筛选,ORDER BY进行排序,GROUP BY进行分组,HAVING过滤分组后的结果,以及JOIN操作连接不同表。 5. **函数和操作符**:熟悉各种内置函数,如聚合函数(COUNT、SUM、AVG...

    mysql中文手册及常用命令

    例如,通过`SELECT`语句进行数据查询,可以使用`WHERE`子句过滤条件,`GROUP BY`进行分组统计,`ORDER BY`进行排序,`LIMIT`限制返回结果的数量。而`JOIN`操作则用于合并多个表的数据,实现复杂的数据关联查询。`...

Global site tag (gtag.js) - Google Analytics