来看看这个SQL

explain  SELECT `tradeid`, `name`, `val` FROM `t_tradesattr` WHERE (`name`='账号亮点') AND (`tradeid` IN ('50263473', '50262270', '50261296', '50233614', '50179571', '50175883', 50119000, '50243369', '50258839', '50234546'));

image.png(43.43 KB)



image.png(114.05 KB)

索引有的 命中索引  行数却有问题,太多了 说说为啥?
回复列表(4|隐藏机器人聊天)
  • @Ta / 2023-03-15 / /

    @ChatGPT,mysql explain 中的rows和实际行数一样吗?

  • @Ta / 2023-03-15 / /

    @卷心菜,MySQL 的 EXPLAIN 命令会展示 MySQL 优化器对查询计划的预估,并包含一些估算的统计信息。其中,rows 表示优化器估计的该执行计划扫描的行数。注意,这个值是 MySQL 优化器根据数据库统计信息计算出来的估计值,并不是实际行数,也不一定准确。

    rows 的值通常是根据表的大小、索引的选择性、过滤条件等信息估算出来的。因此,实际查询的行数可能会比 rows 更多或更少,具体取决于查询的具体情况。在某些情况下,优化器可能会过于乐观地估计行数,导致实际扫描的行数比预估的要多,这可能会影响查询性能。

    在执行 EXPLAIN 命令时,如果查询语句中包含了 LIMIT 限制条件,那么 rows 列的值可能会小于实际扫描的行数,因为 MySQL 只需要扫描满足限制条件的前若干行即可。

    因此,rows 值只是一个估算值,而实际行数取决于具体的查询条件和数据情况。如果需要精确的行数统计,可以使用 SELECT COUNT(*) 或者其他统计函数来查询。

  • @Ta / 2023-03-15 / /

    @ChatGPT,mysql一张表上建太多索引有什么优劣

  • @Ta / 2023-03-15 / /

    @卷心菜,在 MySQL 中,索引是用于加速查询的重要手段之一。建立适当的索引可以加速查询,提高查询效率,从而优化数据库性能。但是,如果一张表上建立太多索引,则可能会出现以下的优劣:

    优点:

    • 可以更快地处理特定的查询,因为索引可以使查询更快速、更高效。
    • 可以提高数据的完整性和安全性,因为索引可以确保数据的唯一性、完整性和正确性。
    • 可以提高数据的可靠性,因为索引可以检测和修复数据错误。
    • 可以提高数据库的扩展性和可维护性,因为索引可以帮助减少查询复杂度、提高查询性能和减少维护工作量。

    缺点:

    • 建立过多的索引会增加数据库的存储空间,因为每个索引都需要额外的存储空间。
    • 建立过多的索引会导致插入、更新和删除操作变慢,因为每次操作都需要更新多个索引。
    • 建立过多的索引会导致查询性能下降,因为查询优化器可能无法正确选择最佳索引。
    • 建立过多的索引会增加数据库维护的难度,因为维护多个索引需要更多的工作量和时间。

    因此,建立过多的索引可能会导致数据库性能下降和维护难度增加。在建立索引时,需要权衡索引的优点和缺点,并根据实际情况选择合适的索引。建立适当的索引可以帮助优化数据库性能,提高查询效率,从而提高系统的响应速度和吞吐量。

添加新回复
回复需要登录