永发信息网

Solr 查询速度优化

答案:1  悬赏:20  手机版
解决时间 2021-04-02 23:10
  • 提问者网友:温旧梦泪无声
  • 2021-04-02 08:37
Solr 查询速度优化
最佳答案
  • 五星知识达人网友:低音帝王
  • 2021-04-02 09:01
优化数据访问
查询性能低下的最基本的原因是访问的数据太多,对于低效的查询,可以从下面两个步骤来分析:
(1)确认应用程序是否在检索大量超过需要的行,这通常意味着访问了太多的行,但有时候也有可能访问了太多的列。
(2)确认MySQL服务器层是否在分析大量超过需要的数据行。
一些典型的情况:
(1) 查询不需要的记录。这样的查询上应该加上LIMIT
(2) 多表关联时返回了全部列。应该只取需要的列。
(3) 总是取出全部的列:SELECT *
(4) 重复查询需要的数据。较好的解决方案是使用数据缓存。
确认MySQL只返回了需要的数据之后,接下来应该看看查询是否扫描了过多的数据,最简单的衡量查询开销的三个指标如下:
(1)响应时间
(2)扫描的行数
(3)返回的行数
响应时间=排队时间+服务时间
理性情况下的扫描的行数和返回的行数应该是相等的。
访问类型:MySQL有好几种方式可以查找并返回一行结果,Explain的type列反应了访问类型,访问类型有全表扫描、索引扫描、范围扫描、唯一索引查询、常数引用等,这些速度从慢到块,扫描的行数从大到小。Using Where表示MySQL将通过Where条件来筛选存储引擎返回的数据。MySQL能够以三种方式应用Where条件,从好到坏依次是:
(1)、在索引中使用Where来过滤数据,这是在存储引擎层实现的
(2)、使用了索引覆盖扫描(Extra列中Using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果,这是在MySQL服务器层实现的,但是无需回表查询记录。
(3)、从数据表中返回数据,然后过滤不满足条件的记录,这是在MySQL服务器层实现的,MySQL需要先从数据库中读取记录然后过滤。
如果一个查询需要扫描大量的数据但是只返回少数的行,那么通常可以尝试下面的技巧去优化:
(1)、使用索引覆盖扫描,即把所有需要的列都放到索引中,这样存储引擎无需回表获取对应行就可以返回结果了。
(2)、该表库表结构,使用单独的汇总表
(3)、重写整个复杂的查询,让MySQL优化器能够以最优化的方式执行整个查询。
重构查询的方式
确定一个复杂查询还是多个简单查询更加有效
切分查询:
将一个完整的查询分散到多次小查询中(例如通过Limit)
查询执行的基础
MySQL执行查询的过程:
(1)客户端发送一条查询给服务器
(2)服务器先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果,否则进入下一个阶段。
(3)服务器端进行SQL解析、预处理,再由优化器生成对应的执行计划
(4)将结果返回给客户端。追问非常感谢您的回答。您的回答是针对传统关系型数据库而言,但目前使用的是Solr建立索引的方式来查询数据的,请问这方面有什么好的改进建议吗
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯