精华内容
下载资源
问答
  • 提高多表关联数据查询效率

    千次阅读 2016-11-22 09:15:08
    前期做了一个项目,使用sqlservice数据库,后来发现数据量越多,对应的系统反应速度就越慢,7万多条数据反应要5~6秒,后来试了一下,看看视图是否能提高效率,虽然网上说是没用的,可是自己还是试了一下,结果的确...

    前期做了一个项目,使用sqlservice数据库,后来发现数据量越多,对应的系统反应速度就越慢,7万多条数据反应要5~6秒,后来试了一下,看看视图是否能提高点效率,虽然网上说是没用的,可是自己还是试了一下,结果的确没有效果。于是乎,本人就想,视图能否建个索引试一下呢,于是,把要查询的几个查询条件设置了一个索引,设置后提交,报了一个缺少唯一索引,原来在建其它索引前,必须要先设置一个唯一索引,设置了唯一索引,在设置一下查询条件的索引,速度瞬间上去了,查询直接秒出数据了

    注:建立一般的视图是无法建立索引的,新建索引按钮会变成灰色或者可以点,但是提交索引的时候会报错。这个时候,需要在原索引的as前面加一个with schemabinding。完整的视图语句为 create view   视图名  with schemabinding   as  查询体

    展开全文
  • 怎样提高数据库查询效率

    千次阅读 2019-05-13 09:50:03
    主要通过三种途径提高数据库查询效率:1.SQL的性能优化,2.数据库的性能优化,3.查询优化 1.SQL的性能优化 SQL语句是用户访问关系数据库中数据的唯一方法,通常在一个关系数据库上,服务器的SQL进程会使用该服务器...

    目前可以说大多数程序的所耗的时间大部分在于数据库查询中。打个比方,程序内部代码跑1秒,数据库查询数据需要10秒,maybe夸大了。

    主要通过三种途径提高数据库查询效率:1.SQL的性能优化,2.数据库的性能优化,3.查询优化

    1.SQL的性能优化
     SQL语句是用户访问关系数据库中数据的唯一方法,通常在一个关系数据库上,服务器的SQL进程会使用该服务器的60%~90%的资源,大部分数据库的效率的问题都是由于SQL语句编写不善引起的,所以SQL语句的性能优化十分重要。
    为了编写出高效的SQL语句,首先应按照一定的具体规范来编写SQL语句,Database administrator 都需要收集和整理一份SQL编码规范。其次实在真实数据库上对这些SQL语句进行性能测试和跟踪并不断调整,到达最优以后才正式上线运行。最后需要强调的是,随着数据量的变化和数据库版本升级后,往往会导致部分SQL性能下降,所以对SQL的跟踪优化是Database administrator的一项持续不断的工作。

     

    2.数据库的性能优化
    Database System 是一组程序作用在数据文件上对外提供服务,所以其本身的性能优化也十分重要,对其的优化工作主要是相应的参数调整。
    (1) 通过见识database system的内存对象,获得系统性能指标,发现系统的性能缺陷以及原因
    (2) 针对导致系统性能缺陷的原因,进行相应的参数调整(如增加数据缓存区的大小)
    (3) 跟踪参数调整后系统的各项性能指标,看是否达到预期要求,否则继续调整。
    例如,Oracle通常利用定时执行 statspacke.snap 包收集数据库的运行状态,然后利用程序 spreport.sql对两个才几点之间的数据产生报表,以分析这段时间数据库的各种运行指标。Sybase数据库用 sp_sysmon,sp_monitor,sp_configure 命令才采集和分析一段时间内数据库的各种运行指标。

     

    3.查询优化
    可以通过如下方法来优化查询的:
    (1) 把数据、日志、索引放到不同的I/O设备上,增加读取速度。数据量越大,提高I/O越重要。
    (2) 纵向、横向分割表,减少表的尺寸
    (3) 根据查询条件,建立索引,优化索引、优化访问方式,限制结果集的数量量。注意填充银子要适当(最好使用默认值0)。索引应该尽量的小,使用自己数小的列建索引好,不要对涌现的几个值的列建立单一索引。
    (4) 用OR的子句可以分解成多个查询,并且通过UNION 连接多个查询。它们的速度只与是否使用索引有关,如果查询需要用到联合索引,用UNION ALL执行的效率更高。
    (5) 在查询SELECT语句中庸WHERE子句限制返回的行数。避免表扫描。如果返回不必要的数据,浪费了数据库的I/O资源,加重了网络的负担,降低了性能。如果表很大,在表扫描的期间将表锁住,禁止其他的连接访问表,后果很严重。
    (6) 注意,在没有必要的时候不要用distinct,它同union一样会使查询变慢。
    (7) 在IN后面值得列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。
    (8) 一般在 groupby 和 having 子句之前就能剔除多余的行,所以尽量不要用她们来执行剔除工作。
    (9) 尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。存储过程是编译好的,优化过的,并且被组织到一个执行规划里,且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。

    (10) 不要再一句话里再三地使用相同的函数,浪费资源,将结果放在变量里再调用更快。

    另外,还可以针对大量只读查询操作进行优化,常见的方法有:

    (1) 数据量教教的数据,可以考虑不存储在数据库中,而是通过程序常量的方法解决。

    (2) 需要存储在数据库中的数据,可以考虑采用物化视图(索引视图)。当database administrator在视图上创建索引时。这个视图就被物化(执行)了,并且结果集被永久地保存在唯一聚簇索引中。

    (3) 数据存储时可以考虑适当的数据冗余,以减少数据库表之间的连接操作,提高查询效率。

    (4) 针对数据的特点,采取特定的索引类型,例如位图索引等。

     

     

    个人遇到过的问题


    第二种查询速度比第一种快

     

     

     

    展开全文
  •  实际上,在解析的过程中, 会将‘*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间。 2.增加内存、另外硬盘的读写速度如何?这都是影响查询效率因素。如果磁盘...

    0.索引


    1.当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用 ‘*’ 是一个方便的方法。不幸的是,这是一个非常低效的方法。 实际上,在解析的过程中会将‘*’ 依次转换成所有的列名, 这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。

    2.增加内存、另外硬盘的读写速度如何?这都是影响查询效率因素。如果磁盘读写速度比较慢的话,对于磁盘的I/O操作会存在的瓶颈的。

    3.数据量比较大建议做一下分区处理。把大的表分成几个表,这样的查询效率会大大提高的。

    4.数据库采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。

     例如:
    (低效,执行时间156.3秒)
    SELECT …
    FROM EMP E
    WHERE SAL > 50000 AND JOB = ‘MANAGER’AND 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO);
    
    (高效,执行时间10.6秒)
    SELECT …
    FROM EMP E
    WHERE 25 < (SELECT COUNT(*) FROM EMP WHERE MGR=E.EMPNO) AND SAL > 50000 AND JOB = ‘MANAGER’;


    
    

    展开全文
  • es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别...

    转载自:https://zhuanlan.zhihu.com/p/60458049

    面试题

    es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?

    面试官心理分析

    这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别是有几亿条数据的时候,可能你会懵逼的发现,跑个搜索怎么一下 5~10s,坑爹了。第一次搜索的时候,是5~10s,后面反而就快了,可能就几百毫秒。

    你就很懵,每个用户第一次访问都会比较慢,比较卡么?所以你要是没玩儿过 es,或者就是自己玩玩儿 demo,被问到这个问题容易懵逼,显示出你对 es 确实玩儿的不怎么样?

    面试题剖析

    说实话,es 性能优化是没有什么银弹的,啥意思呢?就是不要期待着随手调一个参数,就可以万能的应对所有的性能慢的场景。也许有的场景是你换个参数,或者调整一下语法,就可以搞定,但是绝对不是所有场景都可以这样。

    性能优化的杀手锏——filesystem cache

    你往 es 里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 filesystem cache 里面去。

     

    es 的搜索引擎严重依赖于底层的 filesystem cache,你如果给 filesystem cache 更多的内存,尽量让内存可以容纳所有的 idx segment file 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高。

    性能差距究竟可以有多大?我们之前很多的测试和压测,如果走磁盘一般肯定上秒,搜索性能绝对是秒级别的,1秒、5秒、10秒。但如果是走 filesystem cache,是走纯内存的,那么一般来说性能比走磁盘要高一个数量级,基本上就是毫秒级的,从几毫秒到几百毫秒不等。

    这里有个真实的案例。某个公司 es 节点有 3 台机器,每台机器看起来内存很多,64G,总内存就是 64 * 3 = 192G。每台机器给 es jvm heap 是 32G,那么剩下来留给 filesystem cache 的就是每台机器才 32G,总共集群里给 filesystem cache 的就是 32 * 3 = 96G 内存。而此时,整个磁盘上索引数据文件,在 3 台机器上一共占用了 1T 的磁盘容量,es 数据量是 1T,那么每台机器的数据量是 300G。这样性能好吗? filesystem cache 的内存才 100G,十分之一的数据可以放内存,其他的都在磁盘,然后你执行搜索操作,大部分操作都是走磁盘,性能肯定差。

    归根结底,你要让 es 性能要好,最佳的情况下,就是你的机器的内存,至少可以容纳你的总数据量的一半。

    根据我们自己的生产环境实践经验,最佳的情况下,是仅仅在 es 中就存少量的数据,就是你要用来搜索的那些索引,如果内存留给 filesystem cache 的是 100G,那么你就将索引数据控制在 100G 以内,这样的话,你的数据几乎全部走内存来搜索,性能非常之高,一般可以在 1 秒以内。

    比如说你现在有一行数据。id,name,age .... 30 个字段。但是你现在搜索,只需要根据 id,name,age 三个字段来搜索。如果你傻乎乎往 es 里写入一行数据所有的字段,就会导致说 90% 的数据是不用来搜索的,结果硬是占据了 es 机器上的 filesystem cache 的空间,单条数据的数据量越大,就会导致 filesystem cahce 能缓存的数据就越少。其实,仅仅写入 es 中要用来检索的少数几个字段就可以了,比如说就写入 es id,name,age 三个字段,然后你可以把其他的字段数据存在 mysql/hbase 里,我们一般是建议用 es + hbase 这么一个架构。

    hbase 的特点是适用于海量数据的在线存储,就是对 hbase 可以写入海量数据,但是不要做复杂的搜索,做很简单的一些根据 id 或者范围进行查询的这么一个操作就可以了。从 es 中根据 name 和 age 去搜索,拿到的结果可能就 20 个 doc id,然后根据 doc id 到 hbase 里去查询每个 doc id 对应的完整的数据,给查出来,再返回给前端。

    写入 es 的数据最好小于等于,或者是略微大于 es 的 filesystem cache 的内存容量。然后你从 es 检索可能就花费 20ms,然后再根据 es 返回的 id 去 hbase 里查询,查 20 条数据,可能也就耗费个 30ms,可能你原来那么玩儿,1T 数据都放 es,会每次查询都是 5~10s,现在可能性能就会很高,每次查询就是 50ms。

    数据预热

    假如说,哪怕是你就按照上述的方案去做了,es 集群中每个机器写入的数据量还是超过了 filesystem cache 一倍,比如说你写入一台机器 60G 数据,结果 filesystem cache 就 30G,还是有 30G 数据留在了磁盘上。

    其实可以做数据预热

    举个例子,拿微博来说,你可以把一些大V,平时看的人很多的数据,你自己提前后台搞个系统,每隔一会儿,自己的后台系统去搜索一下热数据,刷到 filesystem cache 里去,后面用户实际上来看这个热数据的时候,他们就是直接从内存里搜索了,很快。

    或者是电商,你可以将平时查看最多的一些商品,比如说 iphone 8,热数据提前后台搞个程序,每隔 1 分钟自己主动访问一次,刷到 filesystem cache 里去。

    对于那些你觉得比较热的、经常会有人访问的数据,最好做一个专门的缓存预热子系统,就是对热数据每隔一段时间,就提前访问一下,让数据进入 filesystem cache 里面去。这样下次别人访问的时候,性能一定会好很多。

    冷热分离

    es 可以做类似于 mysql 的水平拆分,就是说将大量的访问很少、频率很低的数据,单独写一个索引,然后将访问很频繁的热数据单独写一个索引。最好是将冷数据写入一个索引中,然后热数据写入另外一个索引中,这样可以确保热数据在被预热之后,尽量都让他们留在 filesystem os cache 里,别让冷数据给冲刷掉

    你看,假设你有 6 台机器,2 个索引,一个放冷数据,一个放热数据,每个索引 3 个 shard。3 台机器放热数据 index,另外 3 台机器放冷数据 index。然后这样的话,你大量的时间是在访问热数据 index,热数据可能就占总数据量的 10%,此时数据量很少,几乎全都保留在 filesystem cache 里面了,就可以确保热数据的访问性能是很高的。但是对于冷数据而言,是在别的 index 里的,跟热数据 index 不在相同的机器上,大家互相之间都没什么联系了。如果有人访问冷数据,可能大量数据是在磁盘上的,此时性能差点,就 10% 的人去访问冷数据,90% 的人在访问热数据,也无所谓了。

    document 模型设计

    对于 MySQL,我们经常有一些复杂的关联查询。在 es 里该怎么玩儿,es 里面的复杂的关联查询尽量别用,一旦用了性能一般都不太好。

    最好是先在 Java 系统里就完成关联,将关联好的数据直接写入 es 中。搜索的时候,就不需要利用 es 的搜索语法来完成 join 之类的关联搜索了。

    document 模型设计是非常重要的,很多操作,不要在搜索的时候才想去执行各种复杂的乱七八糟的操作。es 能支持的操作就那么多,不要考虑用 es 做一些它不好操作的事情。如果真的有那种操作,尽量在 document 模型设计的时候,写入的时候就完成。另外对于一些太复杂的操作,比如 join/nested/parent-child 搜索都要尽量避免,性能都很差的。

    分页性能优化

    es 的分页是较坑的,为啥呢?举个例子吧,假如你每页是 10 条数据,你现在要查询第 100 页,实际上是会把每个 shard 上存储的前 1000 条数据都查到一个协调节点上,如果你有个 5 个 shard,那么就有 5000 条数据,接着协调节点对这 5000 条数据进行一些合并、处理,再获取到最终第 100 页的 10 条数据。

    分布式的,你要查第 100 页的 10 条数据,不可能说从 5 个 shard,每个 shard 就查 2 条数据,最后到协调节点合并成 10 条数据吧?你必须得从每个 shard 都查 1000 条数据过来,然后根据你的需求进行排序、筛选等等操作,最后再次分页,拿到里面第 100 页的数据。你翻页的时候,翻的越深,每个 shard 返回的数据就越多,而且协调节点处理的时间越长,非常坑爹。所以用 es 做分页的时候,你会发现越翻到后面,就越是慢。

    我们之前也是遇到过这个问题,用 es 作分页,前几页就几十毫秒,翻到 10 页或者几十页的时候,基本上就要 5~10 秒才能查出来一页数据了。

    有什么解决方案吗?

    不允许深度分页(默认深度分页性能很差)

    跟产品经理说,你系统不允许翻那么深的页,默认翻的越深,性能就越差。

    类似于 app 里的推荐商品不断下拉出来一页一页的

    类似于微博中,下拉刷微博,刷出来一页一页的,你可以用 scroll api,关于如何使用,自行上网搜索。

    scroll 会一次性给你生成所有数据的一个快照,然后每次滑动向后翻页就是通过游标 scroll_id移动,获取下一页下一页这样子,性能会比上面说的那种分页性能要高很多很多,基本上都是毫秒级的。

    但是,唯一的一点就是,这个适合于那种类似微博下拉翻页的,不能随意跳到任何一页的场景。也就是说,你不能先进入第 10 页,然后去第 120 页,然后又回到第 58 页,不能随意乱跳页。所以现在很多产品,都是不允许你随意翻页的,app,也有一些网站,做的就是你只能往下拉,一页一页的翻。

    初始化时必须指定 scroll 参数,告诉 es 要保存此次搜索的上下文多长时间。你需要确保用户不会持续不断翻页翻几个小时,否则可能因为超时而失败。

    除了用 scroll api,你也可以用 search_after 来做,search_after 的思想是使用前一页的结果来帮助检索下一页的数据,显然,这种方式也不允许你随意翻页,你只能一页页往后翻。初始化时,需要使用一个唯一值的字段作为 sort 字段。

    展开全文
  • 处理百万级以上的数据查询提高效率的办法 1.应尽量避免在 where 子句中使用!=或&lt;&gt;操作符,否则将引擎放弃使用索引而进行全表扫描。 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...
  • es 在数据量很大的情况下(数十亿级别)如何提高查询效率?二. 数据预热三. 冷热分离四. document 模型设计五. 分页性能优化 一. es 在数据量很大的情况下(数十亿级别)如何提高查询效率? es 性能并没有你想象中...
  • 如果面试的时候碰到这样一个面试题:ES 在数据量很大的情况下(数十亿级别)如何提高查询效率? 这个问题说白了,就是看你有没有实际用过 ES,因为啥?其实 ES 性能并没有你想象中那么好的。 很多时候数据量大了,...
  • 14、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起...
  • neo4j刚启动数据需要预热 使用bin/neo4j-shell 进入neo4j命令行界面,执行以下语句预热: MATCH (n) OPTIONAL MATCH (n)-[r]-&gt;() RETURN count(n.name) + count(r); 索引问题 首先使用explain ,看...
  • 从数据库设计方面考虑: 建立索引 分区(MysQL,比如按时间分区) 尽量使用固定长度的字段 限制字段长度 从数据库I/O方面: 增加缓冲区 如果涉及表的级联,不同的表存储在...如果反复使用的查询,使用preparedStament减少...
  • InnoDB提高数据insert效率

    千次阅读 2013-11-26 13:14:31
    如果local_infile 被禁用,InnoDB中怎么提高insert的效率呢? 1.尽量保持数据有序。减少数据插入时对索引的维护成本。 2.一次插入多条数据。减少日志,降低日志刷新磁盘的频率。减少sql解析次数。 3.在事物中进行...
  • 提升数据库数据查询效率

    千次阅读 2016-10-29 08:29:01
    可以说在信息化如此广泛的今天,企业信息化是提升企业运营效率的必经之路,数据是企业资产中必不可少的组成部分,数据组织效率的高低可能直接影响企业业务的进展,数据的安全则关系到整个企业的命运与兴亡。数据是...
  • 如果不使用索引,数据会零散的保存在磁盘块中,查询数据需要挨个遍历每一个磁盘块,直到找到数据为止,使用索引后会将磁盘块以树桩结构保存,查询数据时会大大降低磁盘块的访问数量,从而提高查询效率。如果表中的...
  • 1. 数据库方面 1. 建立索引 2.分区(如MySQL,按时间分区) 3. 尽量使用固定长度字段和限制字段长度(如 varchar(10)) 优势:... 提高数据库处理速度; 3. 附带校验数据库是否合法功能 2. 在数据库 I/O方面;...
  • es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别...
  • oracle模糊查询效率提高 ...第一种:把数据存到业务内存中,通过查询内存提高效率。(要求:硬件内存要高) 1,如果想实现内存动态数据,可以监控表数据变化更新内存。   第二种:提高oracle数据库的
  • Mybatis提高查询效率的方式

    万次阅读 2019-08-02 16:45:56
    第一次会执行sql语句查询数据库,然后保存到sqlsession缓存,第二次查询会先从缓存里查找,有的话直接返回不会执行sql. 但是如果两次sql中间增加一次commit操作(insert,delete,update),如: select * from table ...
  • 【遇见CUDA】要更快,请提高数据传输效率

    千次阅读 多人点赞 2020-08-17 21:22:26
    你的CUDA算法,数据传输是否是你的性能瓶颈呢?要用常规还是异步?锁页还是零拷贝?看完此文,你应该能有所判断!
  • ElasticSearch面试 - es 在数据量很大的情况下如何提高查询效率啊? 面试题 es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干...
  • 优势:①降低物理存储空间 ②提高数据库处理速度 ③附带校验数据是否合法功能 2、在数据库I/O方面: (1)增加缓冲区 (2)如果涉及表的级联,不同的表存储在不同磁盘上,以增加I/0速度 3、在SQL语句方面: (1...
  • SQL Server提高并发查询效率

    千次阅读 2013-07-04 15:49:04
    通过去除锁提高SQL Server并发查询效率。不同版本的SQL Server对于并发查询做了不同的优化,导致查询效率差异。
  • 提高sql语句查询效率

    千次阅读 2018-03-06 22:12:54
    提高sql语句查询效率十分重要。以下是结合网上流传比较广泛的几个查询语句优化方法: 首先,数据量大的时候,应尽量避免全表扫描,应考虑在 where及 order by 涉及的列上建立索引,建索引可以大大加快数据的检索速度...
  • 如果采用vector容器可以解决排序,但查询修改数据效率太过低下了,现在纠结该如何提高效率?用list不知道如何?大概的数据结构如下:由于学艺不清,在此请教各位前辈。 struct { int index; std::string name; ...
  • MySQL使用limit 1提高sql查询效率

    千次阅读 2019-03-05 14:30:49
    在做大数据量的web开发的过程中,在程序开发的任何一步中都需要认真的思考能否有更好的办法来提高程序的执行效率。 下面分享一个在实际工作中经常用到却很容易被忽视的一个优化mysql查询效率的方法,合理的使用limit...
  • 如何提高效率SQLITE 大数据量操作 效率
  • 图解面试题:如何提高SQL查询效率

    万次阅读 多人点赞 2019-10-31 21:00:00
    一般在写SQL时需要注意哪些问题,可以提高查询效率?【解题思路】数据量大的情况下,不同的SQL语句,消耗的时间相差很大。按下面方法可以提高查询的效果。1. select子句中尽量避免使用*select子句中,*是选择全部...
  • es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊? 面试官心理分析 这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?其实 es 性能并没有你想象中那么好的。很多时候数据量大了,特别...
  • 如何提高多表查询效率

    千次阅读 2018-12-10 19:27:38
    记录背景 客户反映系统的用户统计模块报...解决方法有两个,一是提高nginx的超时时间,二是优化sql的查询效率,于是选择了后者。 优化的大致思路 加索引,优化sql语句 当你发现做了上述两件事后并没有改善 可以通过...
  • 查询效率慢的原因: 1:没有加索引或者索引失效 where条件使用如下语句会索引失效:null、!=、<>、or连接、in(非要使用,可用关键字exist替代)和not in、'%abc%'; 使用参数:num=@num、表达式操作:...
  • 场景描述:  oracle数据库中有2张表,一张是tm_bus_realtime_log当前表 只有一当前一天的数据数据量有几百万的数据。还有一张表,tm_bus_realtime_...应该如何提高查询的速度?  请各位大牛指点,不胜感激!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,072,624
精华内容 429,049
关键字:

为了提高数据的查询效率