mysql字段扫描_Mysql如何避免全表扫描的方法

Mysql如何避免全表扫描的方法

更新时间:2008年10月18日 01:28:20   作者:

如果MySQL需要做一次全表扫描来处理查询时,在 EXPLAIN 的结果中 type 字段的值是 ALL。

在以下几种条件下,MySQL就会做全表扫描:

1>数据表是在太小了,做一次全表扫描比做索引键的查找来得快多了。当表的记录总数小于10且记录长度比较短时通常这么做。

2>没有合适用于 ON 或 WHERE 分句的索引字段。

3>让索引字段和常量值比较,MySQL已经计算(基于索引树)到常量覆盖了数据表的很大部分,因此做全表扫描应该会来得更快。

4>通过其他字段使用了一个基数很小(很多记录匹配索引键值)的索引键。这种情况下,MySQL认为使用索引键需要大量查找,还不如全表扫描来得更快。

对于小表来说,全表扫描通常更合适。但是对大表来说,尝试使用以下技术来避免让优化程序错误地选择全表扫描:

1>执行 ANALYZE TABLE tbl_name 更新要扫描的表的索引键分布。

2> 使用 FORCE INDEX 告诉MySQL,做全表扫描的话会比利用给定的索引更浪费资源。

SELECT * FROM t1, t2 FORCE INDEX (index_for_column)

WHERE t1.col_name=t2.col_name;

3>启动 mysqld 时使用参数 --max-seeks-for-key=1000 或者执行 SET max_seeks_for_key=1000 来告诉优化程序,所有的索引都不会导致超过1000次的索引搜索。

相关文章

1a1b05c64693fbf380aa1344a7812747.png

这篇文章主要介绍了MySQL如何查看元数据锁阻塞在什么地方的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下2017-10-10

4f55910a645b073bc4fc65dc10dc14bd.png

这篇文章主要介绍了MYSQL分页limit速度太慢的优化方法,需要的朋友可以参考下2016-05-05

0ea3c7666119d5615e582f823fb3fad6.png

本篇文章对mysql数据类型进行了详细的介绍,需要的朋友参考下2013-05-05

4f96a78db829b1556ff16de21e013c7a.png

mysql主从方案主要作用:读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。2015-10-10

8cc1031babc6aff2319f1c6af8544aa0.png

使用mysql5.5,突然root密码忘记,怎么也登录不了,很急人,该怎么解决呢?下面通过本文给大家介绍mysql5.5忘记root密码的解决办法,需要的朋友参考下吧2016-01-01

0c932a99bb7b6f23c937db507070cc7b.png

这篇文章主要介绍了mysql group_concat()函数用法,结合实例形式较为详细的group_concat()函数的功能、使用方法与相关注意事项,需要的朋友可以参考下2016-06-06

cca732bf65a93ed2ec0ac80c638460fe.png

今天小编就为大家分享一篇在MySQL concat里面使用多个单引号,三引号的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-03-03

2d9f31f2af7b675a3d153d2b7f1035a7.png

这篇文章主要介绍MySQL 主键与索引的联系与区别,使用mysql的朋友可以看下2013-02-02

b452cee8ec5cd9e58ab98eba17281e59.png

这篇文章主要介绍了MySql添加新用户及为用户创建数据库和给用户分配权限方法介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-08-08

f4838ec7e2d4da28e0b57d4e852dadd4.png

在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。2011-03-03

最新评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,有些情况下即使使用了 `WHERE` 条件,MySQL 仍然可能进行全表扫描。这通常发生在以下情况下: 1. 没有合适的索引:如果在查询中使用了 `WHERE` 条件,但没有适当的索引来支持该条件,MySQL 将不得不对整个表进行扫描,以找到满足条件的行。在这种情况下,可以考虑创建适当的索引来提高查询性能。 2. 条件不可索引化:有些 `WHERE` 条件可能无法使用索引进行优化。例如,使用函数、表达式、或者对列进行计算的条件。在这种情况下,MySQL 无法使用索引来筛选行,因此会进行全表扫描。 3. 数据量较小:如果表中的数据量较小,即使没有索引或条件不可索引化,MySQL 也可能选择进行全表扫描。因为全表扫描可能比使用索引更高效,特别是当数据量较小时。 4. 强制全表扫描:有时,即使存在适当的索引和可用的优化策略,MySQL 仍然可能选择全表扫描。这可能是由于查询优化器的决策或查询执行计划的其他因素所致。 为了避免全表扫描,可以考虑以下操作: - 确保表中的列使用适当的索引来支持常用的查询条件。 - 避免在查询中使用不可索引化的条件,尽量将计算和函数处理移到应用程序层面。 - 调整 MySQL 的查询优化参数,例如 `optimizer_switch` 或 `optimizer_search_depth`,以改善查询优化器的行为。 - 监视和优化数据库的性能,包括硬件、索引、查询语句等方面,以提高查询效率。 请注意,MySQL 的查询优化和执行计划是一个复杂的主题,不同的情况可能会导致不同的结果。因此,最好根据具体情况进行评估和优化。 希望这个解答对您有所帮助。如果还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值