索引

mysql索引创建&查看&删除

家住魔仙堡 提交于 2020-03-02 07:38:04
1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍。 例如,有3个未索引的表t1、t2、t3,分别只包含列c1、c2、c3,每个表分别含有1000行数据组成,指为1~1000的数值,查找对应值相等行的查询如下所示。 SELECT c1,c2,c3 FROM t1,t2,t3 WHERE c1=c2 AND c1=c3 此查询结果应该为1000行,每行包含3个相等的值。在无索引的情况下处理此查询,必须寻找3个表所有的组合,以便得出与WHERE子句相配的那些行。而可能的组合数目为1000×1000×1000(十亿),显然查询将会非常慢。 如果对每个表进行索引,就能极大地加速查询进程。利用索引的查询处理如下。 (1)从表t1中选择第一行,查看此行所包含的数据。 (2)使用表t2上的索引,直接定位t2中与t1的值匹配的行。类似,利用表t3上的索引,直接定位t3中与来自t1的值匹配的行。 (3)扫描表t1的下一行并重复前面的过程,直到遍历t1中所有的行。 在此情形下,仍然对表t1执行了一个完全扫描,但能够在表t2和t3上进行索引查找直接取出这些表中的行,比未用索引时要快一百万倍。 利用索引,MySQL加速了WHERE子句满足条件行的搜索,而在多表连接查询时

mysql查看数据表索引信息

白昼怎懂夜的黑 提交于 2020-03-02 07:37:32
查看索引 mysql> show index from tblname; mysql> show keys from tblname; · Table 表的名称。 · Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。 · Key_name 索引的名称。 · Seq_in_index 索引中的列序列号,从1开始。 · Column_name 列名称。 · Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。 · Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 · Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。 · Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。 · Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。 · Comment 来源: https://www.cnblogs.com

MySQL查看表索引

孤人 提交于 2020-03-02 07:36:48
mysql> show index from tblname; mysql> show keys from tblname; · Table 表的名称。 · Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。 · Key_name 索引的名称。 · Seq_in_index 索引中的列序列号,从1开始。 · Column_name 列名称。 · Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。 · Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 · Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。 · Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。 · Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。 · Comment 来源: https://www.cnblogs.com/kenwong

如何查看MySQL索引

一世执手 提交于 2020-03-02 07:36:09
查看MySQL索引,查看到的都是哪些信息呢?下面为您介绍的是查看 MySQL 索引方面的知识,希望对您学习MySQL索引方面能有所帮助。 mysql> show index from tblname; mysql> show keys from tblname; · Table 表的名称。 · Non_unique 如果MySQL索引不能包括重复词,则为0。如果可以,则为1。 · Key_name 索引的名称。 · Seq_in_index 索引中的列序列号,从1开始。 · Column_name 列名称。 · Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality MySQL索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。 · Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 · Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。 · Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。 · Index_type

[转帖]SQL Server中是否可以准确获取最后一次索引重建的时间?

吃可爱长大的小学妹 提交于 2020-03-02 07:30:32
SQL Server中是否可以准确获取最后一次索引重建的时间? https://www.cnblogs.com/kerrycode/p/10394427.html 在SQL Server中,我们能否找到索引的创建时间?最后一次索引重建(Index Rebuild)的时间? 最后一次索引重组(INDEX REORGANIZE)的时间呢? 答案是我们无法准确的找到索引的创建时间、最后一次索引重组时间,最后一次索引重建的时间。 其实就目前SQL Server的各个版本而言,还没有一个系统表或DMV视图有保存索引创建的时间,索引重建的时间、索引重组的时间。但是有些方法可以间接得到最后一次索引重建的时间,但是这个值有时候往往不是准确的(有时候是准确的,有时候是不准确的)。 在sys.sysindexes 中没有记录索引的创建、修改时间。而在sys.objects中,有create_date和modify_date两个字段,但是sys.objects不会记录所有索引的相关信息。所以modify_date的值不能作为用来判断索引重建、索引重组的时间。这两个字段的具体意义如下: create_date datetime 对象的创建日期。 modify_date datetime 上次使用 ALTER 语句修改对象的日期。 如果对象为表或视图,则创建或修改表或视图的聚集索引时,modify_date

6,ORM组件XCode(撬动千万级数据)

夙愿已清 提交于 2020-03-02 05:27:35
有了前面的《动手》,基本上可以进行开发了。本篇我们来试试XCode的基本功功力如何,测试在单表一千万业务数据的环境下查询的速度,添删改等没什么可测试的。其实应该说是XCode开发模式的功力,XCode组件仅仅是处理分页而已,而XCode开发模式为高性能开发提供了更多的建议。 测试环境: 双核CPU,4G内存,win7+SQL2008+vs2010 数据表字段包括:自增ID、车牌、时间。使用SQL准备一千万测试数据,花了将近一个小时。 测试用例:ID的升序降序,时间的升序降序,每一种情况测试取首页、中间页、尾页的时间。 XCode开发模式非常看重分页,基本上所有集合查询方法都带有分页参数。Entity层只负责生成获取满足条件的所有数据的SQL,加上分页参数后传递给下层数据访问层,自身不处理问题。数据访问层调用IDatabase接口的PageSplit方法,把上述的SQL处理为只获取指定页的SQL,然后再执行查询操作。因为不同的数据库分页方法不同,所以XCode的这种架构让使用者无需关心采用哪一种分页方法。测试环境是SQL2008,所以自动采用row_number分页。 首先建立数据表 代码 CREATE TABLE [ dbo ] . [ test ] ( [ ID ] [ int ] IDENTITY ( 1 , 1 ) NOT NULL , [ HPHM ] [ varchar

python字符串截取与替换的例子

廉价感情. 提交于 2020-03-02 05:05:42
python字符串截取与替换的多种方法 时间:2016-03-12 20:08:14来源:网络 导读:python字符串截取与替换的多种方法,以冒号分隔的字符串的截取方法,python字符串替换方法,用字符串本身的方法,或用正则替换字符串。 转自:http://www.xfcodes.com/python/zifuchuan/9398.htm python字符串截取与替换的多种方法 一,字符串的截取 Python的字符串是有序集合,可以通过索引来提取想要获取的字符,把python的字符串作为字符串的列表好理解些。 python的字串列表有2种取值顺序: 第一种是从左到右索引默认0开始的,最大范围是字符串长度少1: 复制代码 代码示例: s = 'ilovepython' s[0]的结果是i 第二种是从右到左索引默认-1开始的,最大范围是字符串开头: 复制代码 代码示例: s = 'ilovepython' s[-1]的结果是n 上面这个是取得一个字符,如果要取得一断字符的话,可以用到python 字符串截取功能,比如: 复制代码 代码示例: s = 'ilovepython' s[1:5]的结果是love 当使用以冒号分隔的字符串,python返回一个新的对象,结果包含了以这对偏移标识的连续的内容,左边的开始是包含了下边界,比如上面的结果包含了s[1]的值l

数据库优化之索引

做~自己de王妃 提交于 2020-03-02 04:36:45
一 、引言 首先我们来思考一下什么是索引?索引的作用是什么?操作系统的文件索引和数据库的索引有什么不同? 什么是索引?对于这个问题我们可以打一个比喻,索引相对于文件的作用,就好比是目录相对于一本书的作用。所以它的作用也就显而易见了,就是为了查找,提高查找效率。是不是感觉不太有用,那再想一想你查字典的时候一页一页的找试一试,买一本最便宜的字典都要含着泪才能翻完。正常查找字典我们一般先找到部首的笔画,然后找到部首,再根据部首找到字,再根据字找到对应的页,这其实就是一个多级索引。所以说计算机科学里面的很多智慧来来自于生活。 接下来就是操作系统的文件索引和数据库的索引的区别了。一般操作系统都有一张索引表,因为一般操作系统的文件是无结构的字节系列,所以操作系统的索引表记录的是数据的逻辑块号和对应的物理块号。而数据库文件是有结构的记录,所以它可以由每一条记录的关键码来和物理块对应。 特别需要注意的是索引键对于的值是磁盘(外存)的物理地址,而不是内存中的逻辑地址。数据库在读取表的时候首先是先读取索引文件(可能数据文件本身就是索引文件,这和不同的实现方式相关, InnoDB 就是这种实现)。然后根据索引表来读取数据。 二 、选择率 要理解利用索引对数据库查询做优化有一点非常重要,就是全表扫描和索引扫描的区别,索引下面的内容非常重要。 对数据库操作影响最大的就是 IO 操作。表的扫描操作就和 IO

PostgresSQL-检查索引的使用

旧时模样 提交于 2020-03-02 02:07:11
尽管在 PostgreSQL 里的索引并不需要维护和调节, 但是检查一下哪些索引是在实际查询工作中得到使用的仍然是非常重要的。 检查索引的使用是通过 EXPLAIN 命令进行的; 为此目的做的应用在 Section 13.1 里演示。 我们也可以在一个运行的服务器上收集有关索引使用的全部可能性, 就想在 Section 24.2 里描述的那样。 归纳一个判断需要设置哪些索引的通用过程是很难的。 在前面的章节中已经列出了许多典型的例子。 在大多数情况下我们都需要许多试验。本节的剩余部分就是给出一些这方面的窍门。 总是先运行 ANALYZE 。 这条命令收集关于表中数值分布的统计。猜测一个查询返回的行数需要这个信息, 而 规划器需要这个行数以便给每个可能的查询规划赋予真实开销值 。 如果缺乏任何真实的统计信息,那么就会假设一些缺省数值, 那肯定是不准确的。因此,如果还没有运行 ANALYZE 就检查一个应用的索引使用状况,那实际上就是一次失败的检查。 使用真实的数据做实验。用测试数据设置索引将告诉你在测试数据中需要什么索引,而不是在所有数据中。 最要命的是用很小的数据集。如果从 100000 行中选 1000 行是使用索引的好时机, 那么从 100 行中选 1 行很难说也需要索引, 因为 100 行很可能是装在一个磁盘页里面的,

PostgresSQL-EXPLAIN

牧云@^-^@ 提交于 2020-03-02 00:55:17
13.1. 使用 EXPLAIN PostgreSQL 为给它的每个查询产生一个 查询规划 。 为匹配查询结构和数据属性选择正确的规划对性能绝对有关键性的影响。 因此系统包含了一个复杂的 规划器 用于寻找最优的规划。 你可以使用 EXPLAIN 命令察看规划器为每个查询生成的查询规划是什么。 阅读查询规划是一门值得写一个相当长的教程的学问, 而我这份文档可不是这样的教程,但是这里有一些基本的信息。 查询规划的结构是一个 规划节点 的树。 最底层的节点是表扫描节点:它们从表中返回原始数据行。 不同的表访问模式有不同的扫描节点类型:顺序扫描,索引扫描,以及位图索引扫描。 如果查询需要连接,聚集,排序,或者是对原始行的其它操作, 那么就会在扫描节点"之上"有其它额外的节点。 并且,做这些操作通常都有多种方法,因此在这些位置也有可能出现不同的节点类型。 EXPLAIN 的输出给规划树里面的每个节点都有一行输出, 显示基本的节点类型和规划器为执行这个规划节点计算出来的预计的开销值。 第一行(最上层的节点)是对该规划的总的执行开销的预计;这个数值就是规划器试图最小化的数值。 这里是一个简单的例子,只是用来显示输出会有些啥: [1] EXPLAIN SELECT * FROM tenk1; QUERY PLAN ------------------------------------------