开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

我有一个带条件的查询语句,还有和查询条件对应的索引,但是它不走啊,这是为啥呢?

我有一个带条件的查询语句,还有和查询条件对应的索引,但是它不走啊,这是为啥呢?

提问29.png

展开
收起
巴拉巴拉巴拉 2023-08-24 17:35:02 87 0
4 条回答
写回答
取消 提交回答
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    优化查询条件:确保查询条件与索引列匹配,并尽可能避免使用函数或计算。
    使用兼容的数据类型:确保查询条件使用的数据类型与索引列的数据类型兼容。
    减少无关的列:尽可能减少查询中与查询条件无关的列。
    使用更高效的查询语句:尝试使用更高效的查询语句,例如使用EXISTS而不是IN。
    重新编译查询计划:如果你的查询经常被执行,可以尝试重新编译查询计划,以使数据库重新评估执行计划。
    一种常见情况是数据库根据数据统计信息,判断不走索引会比索引效率更高,比如索引区分度不够

    如果查询条件中在索引列上执行了函数操作,MySQL 认为会改变索引的顺序关系,所以也会放弃索引。所以不能在索引列上执行函数操作,可以修改为对where中的值进行函数操作,然后与索引比较

    不能有隐式类型转换,比如索引字段是字符类型,条件是数字,也会把字符类型转换为数字然后比较

    隐式字符编码转换,数据库在字符对比时,会站进行编码统一然后再对比

    2023-08-26 10:46:48
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,可能有以下几个原因:

    1. 数据库中没有符合查询条件的数据:检查一下你带条件的查询语句是否正确,并且确认数据库中是否存在符合条件的数据。如果条件或数据不正确,查询就不会返回任何结果。

    2. 索引不被使用:检查一下你所使用的索引是否是最优的,有时候优化器可能会选择其他索引或者不使用索引,导致查询效率低下。可以使用Explain命令来查看查询计划,看一下优化器是否在使用你所期望的索引。

    3. 数据库统计信息不准确:当数据库中的数据发生变化时,统计信息可能会变得过时,这可能会导致优化器做出错误的选择。你可以使用Analyze命令来更新统计信息,让优化器做出正确的决策。

    4. 查询过于复杂:如果你的查询语句过于复杂,可能会导致查询耗时过长。可以考虑简化查询语句,或者分解成多个子查询来提高查询效率。

    5. 数据库性能问题:如果你的数据库本身存在性能问题,如I/O瓶颈或者内存不足等,就可能会导致查询速度慢。可以考虑调整数据库参数,或者增加硬件资源来优化数据库性能。

    2023-08-25 11:09:48
    赞同 展开评论 打赏
  • 如果你发现你的查询语句没有使用你创建的索引,这可能是由以下几种原因导致的:

    1. 查询语句的问题:确保你的查询语句正确地使用了索引。例如,如果你想在WHERE子句中使用索引,你需要确保WHERE子句中的条件与索引的列匹配。同时,避免在WHERE子句中使用函数,因为这可能会导致索引失效。

    2. 数据类型的问题:如果你的查询涉及到数据类型转换,那么这可能会导致索引失效。例如,如果你在一个字符串类型的列上创建了一个索引,然后在WHERE子句中使用一个整数值作为过滤条件,那么这个索引就不会被使用。

    3. 索引的问题:有时候,即使你的查询语句看起来是正确的,但实际上索引并没有起作用。例如,如果你在一个复合索引的前面几个列上进行了过滤,但后面几个列却没有过滤,那么这个索引也不会被使用。

    4. 统计信息的问题:MySQL会根据统计信息来决定是否使用索引。如果你的表中的数据分布比较复杂,或者统计信息过时,那么MySQL可能会选择不使用索引。

    5. 锁的问题:如果你的查询涉及到大量的行更新或删除,那么这可能会导致索引失效。因为在这种情况下,MySQL需要锁定整个表,以防止数据丢失。

    6. 性能问题:有时候,即使你的查询语句看起来是正确的,但实际上执行效率不高。在这种情况下,MySQL可能会选择不使用索引,以减少I/O操作。

    2023-08-25 09:09:22
    赞同 1 展开评论 打赏
  • random page cost可能太大了

    此答案来自钉钉群“PG|POLARDB技术进阶”

    2023-08-24 17:36:24
    赞同 展开评论 打赏

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 采用 Shared-nothing 与存储计算分离架构,支持水平扩展、分布式事务、混合负载等能力,100%兼容MySQL。 2021年开源,开源历程及更多信息访问:OpenPolarDB.com/about

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载