精华内容
下载资源
问答
  • 数据库索引统计信息不一致 SQL Server was launched in 1993 on WinNT and it completed its 25-year anniversary recently. SQL Server has come a long way since its first release. At the same time, ...

    数据库索引统计信息不一致

    SQL Server was launched in 1993 on WinNT and it completed its 25-year anniversary recently. SQL Server has come a long way since its first release. At the same time, Microsoft announced a preview version of SQL Server 2019. SQL Server 2019 provides the ability to extend its support to big data, Apache Spark, Hadoop distributed file system (HDFS) and provides enhancements to database performance, security, new features, and enhancements to SQL Server on Linux.

    SQL Server于1993年在WinNT上启动,并于最近完成了25周年纪念。 自SQL Server首次发布以来,已经走了很长一段路。 同时,Microsoft宣布了SQL Server 2019的预览版.SQL Server 2019提供了将其支持扩展到大数据,Apache Spark,Hadoop分布式文件系统(HDFS)的功能,并增强了数据库性能,安全性和新功能,以及Linux上SQL Server的增强。

    SQL Server 2012 first introduced Columnstore indexes to improve the workload performance. Using this feature, we store data in the column for the page. We can get high-performance improvements for large-scale queries especially for data warehouse or business intelligence. Columnstore index provides a high degree of data compression too as compared with the uncompressed data.

    SQL Server 2012首先引入了Columnstore索引来提高工作负载性能。 使用此功能,我们将数据存储在页面的列中。 我们可以为大型查询(尤其是数据仓库或商业智能)提供高性能的改进。 与未压缩的数据相比,列存储索引也提供了高度的数据压缩。

    You can explore the concepts of Columnstore index in these articles

    您可以在这些文章中探索Columnstore索引的概念

    SQL Server 2019 provides following enhancements to columnstore indexes

    SQL Server 2019对列存储索引提供了以下增强功能

    1. Columnstore index stats update in clone databases

      克隆数据库中的列存储索引统计信息更新
    2. Compression Estimates for Columnstore

      列存储的压缩估计
    3. Resumable online index creation

      可恢复的在线索引创建

    In this series of article on columnstore index enhancements over SQL Server 2019, we will explore Columnstore index stats update in clone databases.

    在本系列有关SQL Server 2019上的列存储索引增强的文章中,我们将探讨克隆数据库中的列存储索引统计信息更新。

    列存储索引统计信息在克隆数据库中更新。 (Columnstore index stats update in clone databases.)

    Before we move further, let us talk little about a newly introduced feature in SQL Server 2014 SP2, DBCC CLONEDATABASE. This command is used to create an empty copy of the online source user database without any data. We can use this feature to analyze or troubleshoot performance issues in the queries related to the query optimizer. This feature creates an internal snapshot of the DB and copies all metadata, schema, and statistics to the new cloned database.

    在继续进行之前,我们先介绍一下SQL Server 2014 SP2中的一项新功能DBCC CLONEDATABASE 。 此命令用于创建没有任何数据的在线源用户数据库的空副本。 我们可以使用此功能来分析或优化与查询优化器有关的查询中的性能问题。 此功能创建数据库的内部快照,并将所有元数据,架构和统计信息复制到新的克隆数据库。

    If we combine both the features of Columnstore indexes and Clone database, it does not really start to work well until SQL Server 2017. Let me explain this in SQL Server 2017 first and then we will move to SQL Server 2019 enhancements.

    如果我们将Columnstore索引和Clone数据库的功能结合在一起,则直到SQL Server 2017才能真正开始工作。让我先在SQL Server 2017中对此进行解释,然后再转向SQL Server 2019增强功能。

    列存储索引和克隆数据库SQL Server 2017 (Columnstore index and clone database SQL Server 2017 )

    First, we will prepare the environment with the sample database and load data into it.

    首先,我们将使用示例数据库准备环境并将数据加载到其中。

    Create Database SQLShackDemoColumnSore
    GO
    Use SQLShackDemoColumnSore
    GO
    CREATE TABLE [dbo].[Employees](
      [EmpID] [int] NOT NULL,
      [EmpName] [varchar](50) NOT NULL,
      )
    Go
    

    Sample DB and table

    We’ll load some 2m rows of test data into our database

    我们将约200万行测试数据加载到数据库中

    In the next step, create the clustered columnstore index on this table with the following query.

    在下一步中,使用以下查询在此表上创建聚集的列存储索引。

    Use SQLShackDemoColumnSore
    Go
    CREATE CLUSTERED COLUMNSTORE INDEX [CCS_Employees] ON [dbo]. [Employees]
    

    Columnstore index SQL Server 2019

    Let us check the statistics for this table using the sys.stats catalogue view. This view provides information about each statistic in the table, indexes, and views.

    让我们使用sys.stats目录视图检查该表的统计信息。 该视图提供有关表,索引和视图中每个统计信息的信息。

    select * from sys.stats where object_id=OBJECT_ID('employees')
    go
    

    Check the stats after creating Columnstore index SQL Server

    In the result set, we can see statistics named ‘CCS_Employees’. This statistics is created automatically at the time of columnstore index.

    在结果集中,我们可以看到名为“ CCS_Employees”的统计信息。 列存储索引时将自动创建此统计信息。

    Let us insert 3 million records again into this table and perform some select operation to create the automatic statistics.

    让我们再次将300万条记录插入此表中,并执行一些选择操作以创建自动统计信息。

    Now, if we view the statistics we can one more statistics with the name as _wa_sys*. These statistics are created automatically by SQL Server.

    现在,如果我们查看统计信息,则可以再添加一个名为_wa_sys *的统计信息。 这些统计信息由SQL Server自动创建。

    Verify the stats

    Let us view the execution plan as well to verify the estimated and actual number of rows in the table. We can see the table is having 5 million rows as we inserted earlier.

    让我们也查看执行计划,以验证表中的估计行数和实际行数。 我们可以看到该表在前面插入的行中有500万行。

    view execution plan  Columnstore index SQL Server

    Create the clone database using DBCC CLONEDATBASE Command as below.

    如下所示,使用DBCC CLONEDATBASE命令创建克隆数据库。

    DBCC CLONEDATABASE (SQLShackDemoColumnSore, SQLShackDemoColumnSore_CLONE);
    

    Clone database for DB having  Columnstore index SQL Server

    We have created the database clone and our clone database name is SQLShackDemoColumnSore_CLONE. Just make a note of the highlighted statement that ‘clone database should be used for diagnostics purpose only and is not supported for use in a production environment’.

    我们创建了数据库克隆,克隆数据库名称为SQLShackDemoColumnSore_CLONE 。 只需注意以下突出显示的语句:“克隆数据库应仅用于诊断目的,不支持在生产环境中使用”。

    We can view both the Source and Clone database in SSMS.

    我们可以在SSMS中查看Source和Clone数据库。

    View clonedatabase

    In the clone database, as shown below, both statistics exist that we checked earlier for the source database.

    如下所示,在克隆数据库中,存在两个统计信息,我们之前已经检查了它们是否为源数据库。

    Verify the stats

    In SSMS, we can also compare the statistics for both the databases.

    在SSMS中,我们还可以比较两个数据库的统计信息。

    Check stats in SSMS

    Now let us run a query against our clone database and in the actual execution plan, we can see that a warning appears ‘Columns with No statistics’.

    现在让我们对克隆数据库运行查询,在实际执行计划中,我们可以看到警告出现“没有统计信息的列”。

    Also, note the estimated number of rows is 2 million only while our source table contains 5 million rows. It should show the 5 million rows since both the statistics present in the clone database also. It shows that the statistics are not updated for the columnstore index.

    另外,请注意,仅当我们的源表包含500万行时,估计的行数才为200万。 它应该显示500万行,因为克隆数据库中同时存在两个统计信息。 它表明未更新列存储索引的统计信息。

    Execution plan Columnstore index SQL Server

    Executipn plan details

    Now let us view this behavior in SQL Server 2019.

    现在让我们在SQL Server 2019中查看此行为。

    SQL Server 2019列存储索引和克隆数据库行为 (SQL Server 2019 Columnstore index and clone database behavior)

    We observed above that until SQL Server 2017 if we create a clone database for the source database with columnstore index, it does not update the statistics after we create it. This makes difficult to analyze the performance issue if stats are not getting updated.

    上面我们观察到,直到SQL Server 2017,如果我们为具有列存储索引的源数据库创建克隆数据库,它在创建后不会更新统计信息。 如果统计信息没有更新,这将使分析性能问题变得困难。

    SQL Server 2019 provides enhancements to columnstore index stats for clone database. Now stats will be updated automatically in the database created using the DBCC CLONEDATABASE.

    SQL Server 2019增强了克隆数据库的列存储索引统计信息。 现在,统计信息将在使用DBCC CLONEDATABASE创建的数据库中自动更新。

    Let us perform the same test we did in SQL Server 2017. I have copied the data at each stage using Import and Export wizard to keep the data same for both SQL Server 2017 and 2019 versions.

    让我们执行与SQL Server 2017中相同的测试。我已经在每个阶段使用导入和导出向导复制了数据,以使SQL Server 2017和2019版本的数据保持相同。

    In the below image, we can observe that there is no warning sign if we execute the query in the clone database and the number of records is also 5 million as per the source table. This shows that the stats are updated automatically in SQL Server 2019 for columnstore indexes as well. We can get the same kind of execution plan with all details in SQL Server 2019 as compared to previous versions of SQL Server.

    在下图中,如果在克隆数据库中执行查询,则可以看到没有警告标志,并且根据源表,记录数也为500万。 这表明在SQL Server 2019中,列存储索引的统计信息也会自动更新。 与早期版本SQL Server相比,我们可以在SQL Server 2019中获得具有所有详细信息的相同类型的执行计划。

    SQL Server 2019 columnstore index execution plan

    No warning observed in SQL Server 2019 as we can observe here.

    正如我们在这里可以观察到的那样,在SQL Server 2019中未观察到警告。

    SQL Server 2019 columnstore index execution plan

    结论 (Conclusion)

    SQL Server 2019 enhancements for columnstore index stats on the clone database provide a way to troubleshoot performance issues for columnstore indexes as well. Previously, we have had to manually work on the stats update in SQL Server 2017 or prior. We might get more enhancements coming over in next releases related to this. In the next series of article, we will take an overview of a few more feature enhancements of columnstore indexes in SQL Server 2019.

    克隆数据库上列存储索引统计信息SQL Server 2019增强功能也提供了一种解决列存储索引性能问题的方法。 以前,我们必须手动处理SQL Server 2017或更早版本中的统计信息更新。 在与此相关的下一个发行版中,我们可能会提供更多增强功能。 在下一篇文章中,我们将概述SQL Server 2019中列存储索引的其他一些功能增强。

    目录 (Table of contents)

    Columnstore Index Enhancements – Index stats update in clone databases
    Columnstore Index Enhancements – data compression, estimates and savings
    Columnstore Index Enhancements – online and offline (re)builds
    列存储索引增强功能–克隆数据库中的索引统计信息更新
    列存储索引增强功能–数据压缩,估计和节省
    列存储索引增强功能–在线和离线(重新)构建

    翻译自: https://www.sqlshack.com/columnstore-index-enhancements-index-stats-update-in-clone-databases/

    数据库索引统计信息不一致

    展开全文
  • 索引的十一种功能

    2016-03-01 09:39:58
    把文献中的资料单元(如篇名、机构、短语、概念、物名、地名、书名、人名、字词、符号等)一一分解,这就是索引的分解功能。它是索引工作的起跑线和索引编纂的基础,没有对文献内容的这种分解功能,就没有索引。 ...

    索引是个既稳定又开放的信息结构,它有十一种功能。

    1  分解功能

    把文献中的资料单元(如篇名、机构、短语、概念、物名、地名、书名、人名、字词、符号等)一一分解,这就是索引的分解功能。它是索引工作的起跑线和索引编纂的基础,没有对文献内容的这种分解功能,就没有索引。

    过去有些反对索引的人说,索引是把古人的著书“凌迟碎割”。他们对索引法的反对,实出于对流传已久的那种落后的皓首穷经的陋习的偏爱和对新的治学方法的无知,洪业曾鄙视他们为卧于涸辙的鲋鱼,以升斗之水济命,而不知西江水之可羡。虽然如此,但他们所谓的索引是把古人著书“凌迟碎割”的形象说法,却从反面十分正确地道破了索引的分解功能。

    分解功能是索引作用于文献的特殊功能,是它和其他检索工作不同之处。

    2  梳理功能

    每种文献都包容着许多不同性质的资料单元,它们在文献中基本呈无序的状态。把这些无序状态的资料单元按外表特征或内容性质进行各归其类的整理,这就是索引的梳理功能。章学诚早就发现了这种功能,他在给《族孙守一论史表》信中要求其在治二十四史年表时一并把廿二史列传中的人名编成索引,两者互为经纬,这样便可使考古之士,于纷如乱丝之资料中,忽得梳通栉理。

    梳理功能是索引分解的后继。如果只有分解功能而没有梳理的功能,那么分解功能就没有价值。

    梳理是对资料单元的初分。如是字序,只要按笔划或音序归类即可;如是类序只要按大类归纳即可。就像小姑娘梳头,先把长发梳顺,而编什么辫子或梳什么发型则是下一步的要求了。

    3  组合功能

    把梳理后的资料单元按照分类的要求,严密地组织它们的类别层次以及类目下的专题和同类目下款目的序列关系;或按字序的要求,严密地把标目的结构正装或倒装、考虑限定词对标目的限定和修饰的级数、或考虑字序和类序相结合的可能。此外,不论是类序或字序都要考虑参照系统的建立方案,使相关款目形成网络,使用户检索的眼界得以拓宽。这些,都是索引的组合功能。

    过去,国外的同行曾把圣经的页边索引以“串珠”命名;我国有人曾把本草的方剂编成索引,以“针线”命名,“串珠”和“针线”是索引组合功能很形象的描绘。它使文献资料单元成为一串串的明珠,成为被针线贯穿起来的资料单元的珍品。

    4  结网功能

    对某个领域的文献进行有计划的索引编纂,利用类型的结构从各种不同的角度和层次对这些文献的内容进行纵横交错和多维的揭示和组合,使之形成一个检索这些文献中的各种不同性质的资料单元的网络。这就是索引的结网功能。

    由“主表”和“词族索引”、“范畴索引”、“英汉对照索引”等所组成的《汉语主题词表》是由几种不同性质的索引构建的一个主题词间的联系、辨析主题词词义和被标引的文献主题概念是否精确的一个隐含的语义网络,它对文献中的资料单元产生族性检索和扩大检索途径的作用。这个网络的结构和作用就是运用索引结网功能的一个范例。

    《古今图书集成》囊括了清初以前绝大部分的文献,是我国现存最大的一部类书,广西大学林仲湘等根据它的特点,分别编了经线索引、纬线索引、图表索引、人物传记索引、职方典汇考引和禽虫草木三典释名索引,从该书的各级类目和内容等不同角度交叉编结了一个严密的揭示网络,这又是索引结网功能的具体运用的例证。

    5  揭示功能

    分解功能只是客观地对文献进行解剖,而揭示功能有较强的目的性,它最常出现的是按专业的需要挑选某些资料单元。

    在主题索引的编制中,主题概念的分析和主题词的选用,包括对隐性主题的析出是这种功能的体现。

    各种专题索引或各种专业的文摘索引也是索引揭示功能的运用。清朝徐克祺称赞蔡烈先的《本草万方针线》为镜考、为烛照,这是对索引揭示功能很生动的形容。

    6  鉴别功能

    文献是作者思维的物化,包含了作者用以施展其聪明才智的特有的言语轨迹及其思想气质。在文献的出版史中,出于各种不同的动机和原因,真伪之作叠出,为杜伪辨真,不少人引经据典,注疏考证,一字之微,动千万言,甚至引发了校勘学的出现。近年来又产生了利用索引进行鉴别的方法,通过逐字索引分解被鉴别的文献,即同时从两种版本中分析作者用字(词)的规律和频率以甄别其真伪。

    英国的女研究学家凯洛莱因·斯彼琴曾对莎士比亚的剧作进行过有趣的用词统计和分析,她发现,莎氏使用的许多诗意的语言都和大自然以及乡村生活有关。又有人在研究司马迁的《史记·货殖列传》时,发现这篇不到5000字的文章竟使用49次“富”字,由此得出,致“富”是这篇论文的主题。这些事例证明通过对文献中用词的解剖可以发现作者的特有气质和语言习惯,索引可利用这种潜在的规律辨析文献的真伪。

    7  追踪功能

    索引像只嗅觉灵敏的警犬一样能追踪各种领域的事物在文献中留下来的痕迹。

    一部旧时代报纸的索引,能追踪那个时代的重大历史事件,并清晰地再现这些重大的历史事件脉络;一部类书的索引,能追踪许多名人的各方面的成就和言行;一种专业期刊的刊后索引,能追踪当年该专业学科研究的动态;一部跨多年度的报刊回溯索引,就是一部多功能的追踪记录。

    追踪,是索引的功能之一。

    8  导航功能

    导航就是指引,它带有较强的评价取向,索引具有这种功能。

    过去,我国有一些所谓新产品,在技术人员的积极努力下问市了,但到国际市场上却被打回票,因为这种新产品在别的国家已成老产品。技术人员的情报鼻子不灵,其中原因之一是不查阅有关的索引,不依靠这个情报导航工具,以致迷失了生产的方向。

    在哲学社会科学的领域中,索引经常能提供在某个时期某个专业的理论动向和水平的第一手材料,许多科研工作者就依靠索引的导航,找到自己出发的港湾和要达到的彼岸。

    洪业在《引得说》中指出:“引得者,予学者以游翔于载籍之舟车也。舟车愈善,则其所游愈广,所入愈深。”这就是索引的导航功能。

    9  执简功能

    您感到在信息爆炸的文献环境中很难伸展自己的科研手脚吧?那么,请您先为自己的研究对象编编索引,那就可以执简御繁了。我国的史学家顾颉刚曾说:“我常想暂不办学术研究所而先办材料整理所。”“索引,也是研究的基础的一种,它能给您一个钥匙,使您在许多头绪不清的材料中找出头绪,而得到你所需要的东西。”

    国外盛行的那种快速反映科研情报的KWIC、KWOC,就是发挥索引执简功能的工具,把众多科研期刊中的关键词以最简要的格式显现,使用户能享受“索引在手,千刊掌握”的好处,而避免花去一半的科研时间在众多的资料堆中苦苦求索。因而,不少科研工作者赞誉索引有“天增岁月人增寿”的妙用。

    10  检索功能

    索引诞生在文献检索困难的历史背景里,它的检索功能随索引的诞生同步而生。在近二千年的索引发展史中,检索功能的变化和发展就是它的主要内容。所以,检索功能是索引最基本的功能。

    任何文献记录或工作记录一旦和索引方法挂上钩,它就会从山穷水尽疑无路的困境中解脱出来,很快得到检索方便的好处,机关或企业中人事档案和工资单的人员的索引就是如此。又如,最令旅游者头疼的是,到了一个旅游点,买了地图,但要寻找一个地区、一条街道或里弄,那真像大海捞针一样的困难。当这幅地图加上了地名索引后,所要之地名便一检即得了。

    11  预测功能

    索引中有不少数学现象,如从引文索引中统计到被引作者的论文频率,便基本上能预测到这个专业的学术带头人的出现;从题录索引中统计的课题内容,便可预测到学术界未来研究的动向;从统计索引中出现的各种产品名称的频率,便能预测到市场将出现的热门商品。这些都是索引的预测功能。

    展开全文
  • 缺失索引功能的限制

    2008-11-26 09:16:58
    缺失索引功能具有下列限制: ...它不能收集 500 个以上缺失索引统计信息。 它无法指定要在索引中使用顺序。 对于只涉及不等谓词查询,它将返回不太准确开销信息。 它针对某些查询只报告...

    缺失索引功能具有下列限制:

    它不可用于微调索引配置。

    它不能收集 500 个以上缺失索引组的统计信息。

    它无法指定要在索引中使用的列的顺序。

    对于只涉及不等谓词的查询,它将返回不太准确的开销信息。

    它针对某些查询只报告包含列,因此必须手动选择索引键列。

    它只返回有关可能缺失索引的列的原始信息。

    它不会建议使用筛选索引。

    它可能会针对在 XML 显示计划中多次显示的同一缺失索引组返回不同的开销。

    它不会考虑不重要的查询计划。

    下列各部分提供了有关这些限制的详细信息。

     微调索引配置
    缺失索引功能是一个用于查找缺失索引的轻量工具,它可以显著提高查询性能。它不提供足以微调索引配置的信息。若要实现此目的,请使用数据库引擎优化顾问。有关数据库引擎优化顾问的详细信息,请参阅优化物理数据库设计和相关的查询优化功能。

     最大缺失索引组数
    可以收集最多 500 个缺失索引组的相关统计信息。达到此阈值后,将不再收集其他缺失索引组数据。此阈值是不可优化的参数,不能进行更改。

     索引列顺序
    在建议索引时,缺失索引功能不考虑最佳的排序顺序。请参考以下示例查询:

     复制代码
    SELECT column_a, column_b
    FROM table_1
    WHERE column_a < 10000
    AND column_b < 10000
    ORDER BY column_b, column_a缺失索引功能可能建议一个索引并将 column_a 列在 column_b 的前面,但有利的排序顺序应为 column_b、column_a,因为这符合查询的排序顺序。当创建数据定义语言 (DDL) 语句以实现缺失索引时,可以通过检查各个工作负荷查询来选择最佳的排序顺序。有关根据从缺失索引功能接收的输出对 CREATE INDEX 语句中的列进行排序的详细信息,请参阅使用缺失索引信息编写 CREATE INDEX 语句。

     只涉及不等谓词的查询
    对于只涉及不等谓词的查询,缺失索引功能使用一个简单模型生成开销信息。因此,对这些查询返回的开销信息可能不如对涉及相等谓词的查询返回的信息准确。请参考以下不包含相等谓词的示例查询:

     复制代码
    SELECT *
    FROM table_1
    WHERE column_a > -1
    AND column_b > -1此示例查询只包含一个不等谓词 (WHERE column_a > -1 AND column_b > -1)。假定 table_1 中的所有行都符合谓词 column_a > -1 和 column_b > -1 的要求。在这种情况下,缺失索引功能可能会针对 column_a 和 column_b 错误地建议索引。在这种情况下,由动态管理视图 sys.dm_db_missing_indexes_group_stats 报告的关联影响数目可能也不正确。

     对某些查询只返回包含列
    有时,此功能只报告包含列的列用法信息。例如,此功能可能会报告相等列 = { },不等列 = { },包含列 = {b, c, …}。在这种情况下,必须为索引键列选择包含列之一。使用为受益于某些相同列的其他查询返回的缺失索引信息,确定应该为索引键选择的包含列。

     只返回原始信息
    缺失索引功能可返回有关缺失索引的列的原始信息。这意味着使用返回的信息创建索引之前,可能需要先对该信息进行其他处理。

    例如,如果涉及的列是一个计算列,并且该计算不确定或不精确,则针对该列的 CREATE INDEX 语句将失败。如果计算不精确,则只有首先将该列持久化,然后才能创建索引。

     为 XML 显示计划中的同一缺失索引组返回不同的开销
    缺失索引组可能会在 XML 显示计划中显示多次,并且每次显示缺失索引组时,都报告不同的开销。当单个查询的不同部分从同一缺失索引组获得不同收益时,可能会出现这种情况。

    请参考以下示例查询:

     复制代码
    SELECT i.CustomerID, c.ModifiedDate, City
    FROM NewIndividual i JOIN NewCustomer c ON i.CustomerID = c.CustomerID
                        AND c.CustomerType = 'I'
              JOIN NewCustomerAddress ca ON ca.CustomerID = c.CustomerID
              JOIN NewAddress a ON a.AddressID = ca.AddressID
    WHERE i.CustomerID = 16701在此查询中,CustomerID 列上的两个不同的联接条件可能会生成两个完全相同的缺失索引组,这两个组对 NewIndividual.CustomerID 列包含相同的索引。在这种情况下,缺失索引组在 sys.dm_db_missing_index_groups 动态管理视图中只占一行。但是,缺失索引组将在 XML 显示计划输出中显示多次,并且对于不同的联接条件,具有不同的开销。

     

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-503354/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/16436858/viewspace-503354/

    展开全文
  • UITbableView分组展示...下面,就介绍一下索引的最简单地设置。 设置表格索引的步骤: 1、添加表格,设置代理和数据源 2、得到要显示的数据的数组 3、得到右侧显示索引的数组,索引数组中元素的个数要

    UITbableView分组展示信息时,有时在右侧会带索引,右侧的索引一般为分组的首字母,比如城市列表的展示。当点击右侧索引的字母,列表会快速跳到索引对应的分组,方便我们快速查找。下面,就介绍一下索引的最简单地设置。


    设置表格索引的步骤:

    
        1、添加表格,设置代理和数据源
    
        2、得到要显示的数据的数组
    
        3、得到右侧显示索引的数组,索引数组中元素的个数要与显示的分组数量对应
    
        4、实现tableview中必须实现的几个方法
    
        5、实现sectionIndexTitlesForTableView:方法,在这个方法中返回索引数组
    
        6、实现titleForHeaderInSection:方法,设置组标题,一般右侧索引与组标题内容是一致的
    

    代码:

    
        //  ViewController.m  
        //  TableView索引  
        //  
        //  Created by jerehedu on 15/6/11.  
        //  Copyright (c) 2015年 jerehedu. All rights reserved.  
        //  
          
        #import "ViewController.h"  
          
        @interface ViewController ()<UITableViewDataSource, UITableViewDelegate>  
        {  
            UITableView *_tableView;  
              
            NSArray *_citysAry; //要显示的城市数组  
              
            NSMutableArray *_indexArray; //索引数组  
        }  
          
        @end  
          
        @implementation ViewController  
          
        - (void)viewDidLoad {  
            [super viewDidLoad];  
             
            _citysAry = @[  
                         @[@"北京",@"上海",@"广州",@"烟台"],  
                         @[@"阿坝",@"阿克苏",@"安康",@"安阳",@"澳门"],  
                         @[@"北京",@"白城",@"白山",@"包头",@"宝鸡",@"保定",@"滨州"],  
                         @[@"重庆",@"成都",@"长沙",@"长春",@"沧州",@"赤峰"],  
                         @[@"大连",@"东莞",@"达州",@"大理",@"大同",@"大兴安岭",@"丹东",@"东营"],  
                         @[@"鄂尔多斯",@"鄂州",@"恩施"],  
                         @[@"佛山",@"福州",@"抚顺",@"阜新",@"阜阳"],  
                         @[@"广州",@"贵阳",@"桂林",@"甘南",@"格尔木",@"广安",@"广元"],  
                         @[@"杭州",@"海口",@"哈尔滨",@"合肥",@"哈密",@"海北",@"海东",@"海西",@"海南",@"邯郸",@"菏泽",@"鹤岗",@"黄山"],  
                         @[@"济南",@"锦州",@"吉林",@"济宁",@"嘉兴",@"嘉峪关",@"金华",@"荆门",@"荆州",@"酒泉",@"景德镇"],  
                         @[@"昆明",@"喀什",@"开封",@"克拉玛依"],  
                         @[@"洛阳",@"拉萨",@"兰州",@"莱芜",@"廊坊",@"乐山",@"丽江",@"连云港",@"辽阳",@"临汾",@"临沂",@"六盘水"],  
                         @[@"茂名",@"马鞍山",@"牡丹江"],  
                         @[@"南京",@"宁波",@"南昌",@"南宁",@"南通",@"宁德"],  
                         @[@"攀枝花",@"盘锦",@"平顶山",@"普洱"],  
                         @[@"青岛",@"齐齐哈尔",@"黔南",@"秦皇岛",@"庆阳",@"琼海",@"泉州"],  
                         @[@"日喀什",@"日照"],  
                         @[@"上海",@"深圳",@"沈阳",@"石家庄",@"苏州",@"三门峡",@"三亚",@"汕头",@"绍兴",@"十堰",@"石河子",@"松原"],  
                         @[@"天津",@"唐山",@"台湾",@"太原",@"泰州",@"泰安",@"通辽",@"吐鲁番"],  
                         @[@"武汉",@"无锡",@"潍坊",@"乌鲁木齐",@"威海",@"五指山"],  
                         @[@"西安",@"厦门",@"徐州",@"西沙",@"仙桃",@"咸阳",@"孝感"],  
                         @[@"银川",@"雅安",@"烟台",@"延安",@"盐城",@"扬州",@"阳江",@"宜宾",@"宜昌",@"玉树"],  
                         @[@"郑州",@"珠海",@"淄博",@"漳州",@"张家口",@"驻马店",@"遵义"],  
                         ];  
              
            //添加tableview  
            _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 20, self.view.frame.size.width, self.view.frame.size.height-20) style:UITableViewStylePlain];  
            _tableView.dataSource = self;  
            _tableView.delegate = self;  
            [self.view addSubview:_tableView];  
              
            //索引数组  
            _indexArray = [NSMutableArray arrayWithObjects:@"#",nil];  
            for (char ch='A'; ch<='Z'; ch++) {  
                if (ch=='I' || ch=='O' || ch=='U' || ch=='V')  
                    continue;  
                [_indexArray addObject:[NSString stringWithFormat:@"%c",ch]];  
            }  
        }  
          
        #pragma mark tableview 每组行数  
        -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  
        {  
            return [[_citysAry objectAtIndex:section] count];  
        }  
          
        #pragma mark 组数  
        -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  
        {  
            return _indexArray.count;  
        }  
          
        #pragma mark 设置每行内容  
        -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath  
        {  
            static NSString *idStr = @"cell";  
            UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:idStr];  
            if (cell == nil) {  
                cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:idStr];  
            }  
              
            cell.textLabel.text = _citysAry[indexPath.section][indexPath.row];  
              
            return cell;  
        }  
          
        #pragma mark 设置组标题  
        - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section  
        {  
            return [_indexArray objectAtIndex:section];  
        }  
          
        #pragma mark 右侧索引  
        -(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView  
        {  
            return _indexArray;  
        }  
          
        @end  
    
    

    表格索引的高级设置

    上面举得是最简单的小例子,已经将要显示的数据进行了排序,实际上真正在开发的过程中,不需要手动排序,可以使用第三方的方法,将所有的城市转为拼音,按照首字母进行分组排序,然后索引也根据拼音首字母自动获得。



    展开全文
  • 今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。Percona版本的information_schema.innodb_index_...
  • 缺失索引功能使用动态管理对象和显示计划,提供有关可增强 SQL Server 查询性能的缺失索引的信息。 组件 当查询优化器生成查询计划时,它将分析什么是用于特定筛选条件的最佳索引。如果不存在最佳索引,则查询优化...
  • sql server索引功能资料

    2016-05-06 21:47:00
    无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息...下面是一些简单的查询索引的sql。MSSQL的DBA_Huangzj 提供。 判断无用...
  •  从2008开始,引入了一个增强非聚集索引的功能——过滤索引(filter index),可以使用带有where条件的语句来创建非聚集索引,过滤掉不需要的数据,降低索引的维护开销和存储空间,提高查询性能。  准备工作...
  • 使用JSON存储文件信息 编写解析器非常容易 命令行实用程序 安装 该模块需要节点10或更高版本。 $ npm install --engine-strict asar 用法 $ asar --help Usage: asar [options] [command] Commands: pack | p ...
  • 在之前下列文章中,我已经展示了索引模式 formatter 强大功能: Kibana:在Kibana中对数据进行深入分析 (drilldown) Kibana:在Kibana 中定制 time picker 及 指标可视化显示格式 在 Kibana 中很...
  • 今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。Percona版本的information_schema.innodb_index_...
  • MySQL索引统计信息

    2019-06-25 15:17:22
    上一篇文章中提到了在MySQL社区版本中,都提供了对于索引统计信息的表,但是,在官方MySQL版本中,是怎么维护索引(或表)统计信息的呢? 官方MySQL中,有performance_schema数据库,主要功能即为监控MySQL ...
  • 关于已分区表和索引的查询处理增强功能 (联机手册) QL Server 2008 改进了许多并行计划的已分区表的查询处理性能,更改了并行和串行计划的表示方式,增强了编译时和运行时执行计划中所提供的分区信息...
  • 索引

    2016-05-30 10:07:34
    数据库索引好比是一本书前面的目录,能够加快数据库的查询速度。数据库索引就是为了提高表的搜索... 根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。  唯一索引:不允许其中任
  • 今天刚刚知道Oracle有个索引统计的功能,可以统计每个索引的使用次数。作为一个Oracle的门外汉,我还是再次感叹人家做的是真细致。第二个想法就是给MySQL也加上。 Percona版本的information_schema.innodb_index_...
  • 在MYSQL中,索引功能有如下几个主要类型:... FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。 不过,主键是一种约束,主键创建后一定包含一个唯一性索引,主键列在创建时,已经默认为非空值 ...
  • ORACLE的索引

    2020-06-18 11:26:42
    在记录插入时生成,表示记录在物理介质上存放位置,它包含了Oracle定位数据行需要所有信息,包括:数据库对象、包括这一行数据文件、数据块在数据文件中位置、记录行在块中位置。 rowid表示记录物理位置...
  • 索引的一个主要目的就是加快检索表中数据,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。 索引分为聚簇索引和非聚簇索引两种,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不...
  • 通过对于城市拼音首字母进行Index索引标识,通过右侧字母索引列表,能够快速到定位到左侧城市列表信息,找到指定字母Index下所有城市列表信息数据,并且进行显示,实现了VantUI中IndexBar索引导航栏功能。...
  • MongoDB索引的类型

    千次阅读 2016-05-04 14:45:43
    数据库索引的功能类似于书籍的索引,书籍有了索引就不需要翻查整本书。与此类似,在进行查询时,数据库会首先在索引中查找,找到相应的条目后,就 可以直接跳转到目标文档的位置。 MongoDB索引几乎与关系型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,838
精华内容 1,135
关键字:

信息索引的功能