索引

【学习】DataFrame&Series类【pandas】

谁都会走 提交于 2020-03-02 09:56:20
参考链接:http://blog.csdn.net/yhb315279058/article/details/50226027 DataFrame类: DataFrame有四个重要的属性: index:行索引。 columns:列索引。 values:值的二维数组。 name:名字。 这个类是Pandas最重要的类之一。 构建方法,DataFrame(sequence),通过序列构建,序列中的每个元素是一个字典。 frame=DateFrame构建完之后,假设frame中有'name','age','addr'三个属性,可以使用fame['name']查看属性列内容,也可以fame.name这样直接查看。 frame按照'属性提取出来的每个列是一个Series类。 DataFrame类可以使用布尔型索引。 groupby(str|array...)函数: 可以使用frame中对应属性的str或者和frame行数相同的array作为参数还可以使用一个会返回和frame长度相同list的函数作为参数,如果使用函数做分组参数,这个用做分组的函数传入的参数将会是fame的index,参数个数任意。使用了groupby函数之后配合,size()函数就可以对groupby结果进行统计。 groupby后可以使用: size():就是count sum():分组求和 apply(func

MySQL引擎

你离开我真会死。 提交于 2020-03-02 08:18:06
MySQL提供多种存储引擎,通过命令 show engines; 查看 查看当前默认的存储引擎 show variables like '%storage_engine%'; 查看某个表用了什么引擎 show create table 表名; MyISAM引擎: 没有提供对数据库事务的支持,也不支持行级锁和外键,因此当INSERT或UPDATE数据时即写操作需要锁定整个表。存储了表的行数,SELECT COUNT(*) FROM TABLE时,只需要直接读取已经保存好的值而不需要进行全表扫描,如果表的读操作远远多于写操作且不需要事务支持,那么MyISAM是个好选择。 InnoDB引擎: InnoDB是MySQL默认的引擎,提供对ACID事务的支持,并且实现SQL标准的四种隔离级别,提供行级锁和外键约束,它的设计目的是处理大容量数据库系统,在运行时,Innodb会在内存建立缓冲池,用于缓冲数据和索引。没有保存表的行数,当SELECT COUNT(*) FROM TABLE时,需要扫描全表。使用行级锁不是一定的,如果一个SQL语句不能确定要扫描的范围,InnoDB表同样会锁全表。 MyISAM引擎索引实现 B+树作为索引结构,叶节点的data域存放的是数据记录的地址。 主键索引原理图: 辅助索引: InnoDB引擎索引实现 同样使用B+树作为索引结构。MyISAM索引文件和数据是分离的

innodb和myisam的差异化

旧街凉风 提交于 2020-03-02 08:05:56
这个问题想必大家都被问过无数次。今天来总结一下。 1.myisam: 文件结构:frm,myi,myd frm是文件信息,myi是索引文件,myd是数据文件。(5.6之前只有myisam支持全文检索。Innodb不支持全文检索,5.6以后开始支持。)mysiam的索引文件会比innodb的小。因为是分开存放的,所以索引文件进行了压缩。而innodb是 myisam引擎支持的表锁,这样就造成myisam对并发的支持非常差。如果对一张表的数据进行修改,整张表都会被锁定,其他进程只能等待该进程释放后才能对该表进行读和写。 select和Insert较innodb来说快。 引用两篇性能测试文章 2012年 http://www.4wei.cn/archives/1001855 2014年 http://xmgu2008.blog.163.com/blog/static/139122380201402492349491/ 从第一篇文章中可以看到,innodb因为受 innodb_flush_log_at_trx_commit 这个选项的影响,所以自动提交和手动提交性能相去甚远。 取select count(*)极快,因为myisam表都会有一个叫表状态的内存空间。这个表的总记录数,以及修改时间和表的长度等等关键数据都是存在一个单独的内存块里面的,当你发起select count(*

smarty中section的使用

若如初见. 提交于 2020-03-02 08:04:38
在smarty的使用过程中,有很多时候需要将一个数组输出到模板中来处理,以下将演示如何将一个索引(index)数组和关联(assocaite)数组在页面中展现出来。 本文中假设有如下一个索引数组 1、索引数组 1 $people = array ( ' tony ' , ' sweety ' , ' abc ' , ' four ' ); 2 $smarty -> assign( ' people ' , $people ); 在模板中显示: 1 {section name=n loop=$people} 2 name:{$people[n]} < br /> 3 {/section} 这样在模板中就可以显示出这个数组的内容了。结果如下: 1 name:tony 2 name:sweety 3 name:abc 4 name:four 2、关联数组 1 $arr = array ( 2 array ( ' id ' => 1 , ' title ' => ' title1 ' ) , 3 array ( ' id ' => 2 , ' title ' => ' title2 ' ) , 4 array ( ' id ' => 3 , ' title ' => ' title3 ' ) 5 ); 6 7 $smarty -> assign( ' news ' , $arr );

索引笔记

老子叫甜甜 提交于 2020-03-02 08:01:49
创建索引语句: Create Unique Index Index_Nameon Table_Name (Column_Name1,Column_Name2,.....) 查询索引: 查询 DBA_INDEXES 视图可得到表中所有索引的列表,注意只能通过 USER_INDEXES 的方法来检索模式(schema)的索引。访问 USER_IND_COLUMNS 视图可得到一个给定表中被索引的特定列。 限制索引使用的条件: 使用不等于操作符(<>、!=) 避免方法: cust_rating <> 'aa' 改成:cust_rating < 'aa' or cust_rating > 'aa' 使用IS NULL 或IS NOT NULL 避免方法: 把需要索引的列设成NOT NULL 使用函数 避免方法: trunc(hiredate)='01-MAY-81' 改成hiredate<(to_date('01-MAY-81')+0.9999); 比较不匹配的数据类型 避免方法: account_number = 990354(其中account_number 为Varchar2型) 改成account_number ='990354' 检索每个索引所包含的 使用USER_INDEXES视图,该视图中显示了一个distinct_keys列。比较一下唯一键的数量和表中的行数

Oracle索引原理

无人久伴 提交于 2020-03-02 08:01:03
Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容: [1] 基本的索引概念 查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。 [2] 组合索引 当某个索引包含有多个已索引的列时,称这个索引为组合(concatented)索引。在 Oracle9i引入跳跃式扫描的索引访问方法之前,查询只能在有限条件下使用该索引。比如:表emp有一个组合索引键,该索引包含了empno、 ename和deptno。在Oracle9i之前除非在where之句中对第一列(empno)指定一个值,否则就不能使用这个索引键进行一次范围扫描。 特别注意:在Oracle9i之前,只有在使用到索引的前导索引时才可以使用组合索引! [3] ORACLE ROWID 通过每个行的ROWID,索引Oracle提供了访问单行数据的能力。ROWID其实就是直接指向单独行的线路图

Oracle索引(Index)介绍使用

时光怂恿深爱的人放手 提交于 2020-03-02 07:56:53
1.什么是引                                               索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据;Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引;索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。 2.使用索引的目的                                             当查询返回的记录数排序表<40%非排序表 <7%且 表的碎片较多(频繁增加、删除)时可以 加快查询速度减少I/O操作消除磁盘排序 3.索引的分类及结构                                             从物理上说,索引通常可以分为:分区和非分区索引、常规B树索引、位图(bitmap)索引、翻转(reverse)索引等。其中,B树索引属于最常见的索引,由于我们的这篇文章主要就是对B树索引所做的探讨,因此下面只要说到索引,都是指B树索引。 B树索引是一个典型的树结构,其包含的组件主要是: 1) 叶子节点(Leaf node):包含条目直接指向表里的数据行。 2) 分支节点(Branch node):包含的条目指向索引里其他的分支节点或者是叶子节点。 3) 根节点

索引调优 第三篇:索引统计

我是研究僧i 提交于 2020-03-02 07:56:20
数据库引擎是高度优化的闭环系统,基于执行计划的反馈,查询优化器在一定程度上自动优化现有的执行计划。查询优化的核心是索引优化,数据库引擎通过计数器统计关于索引操作的数据,统计的信息包括:使用次数、物理存储、底层操作的计数,以及缺失索引等,这些统计数据存储在内存中,是数据库引擎执行情况的真实反馈,高度概括了索引的执行情况,有意识地利用索引的统计信息,有针对性地优化现有的业务逻辑代码,调整查询的执行计划,能够提高数据库的查询性能。 一,统计索引的使用次数 在用户成功提交查询语句时,执行计划中每一个单独的索引操作(Seek,Scan,Lookup或Update)都会被统计到 sys.dm_db_index_usage_stats 中,例如, user_updates 计数器统计索引执行Insert,Update或Delete操作的次数,查找计数器( user_seeks, user_scans, user_lookups )统计在索引上执行的seek,scan和lookup操作的次数,如果查找计数器远远小于 user_updates 计数器,这说明基础表会执行大量的更新操作,维护索引更新的开销比较大,数据库引擎利用索引提升查询性能的空间有限。 在计数时,每一个单独的seek、scan、lookup或update操作都被计算为对该索引的一次使用,并使该视图中的相应计数器加1。 索引的Seek

SQL Server数据库碎片

荒凉一梦 提交于 2020-03-02 07:54:32
当索引所在页面的基于主关键字的逻辑顺序,和数据文件中的物理顺序不匹配时,碎片就产生了。所有的叶级页包含了指向前一个和后一个页的指针。这样就形成一个双链表。理想情况下,数据文件中页的物理顺序会和逻辑顺序匹配。整个磁盘的工作性能在物理顺序匹配逻辑顺序时将显著提升。对某些特定的查询而言,这将带来极佳的性能。当物理排序和逻辑排序不匹配时,磁盘的工作性能会变得低效,这是因为磁头必须向前和向后移动来查找索引,而不是只象某个单一方向来搜索。碎片会影响I/O性能,不过对于位于SQL Server数据缓冲内的数据页而言,碎片并不会带来任何影响。 在索引碎片整理前,请确保系统资源的一些问题,比如物理磁盘碎片,不合理的基础结构等因素会给性能带来负面影响,参看KB935089: 使用 Defrag 管理器可以 such as Exchange Server 或 SQL Server 数据库服务器的卷进行碎片整理 。 DBCC SHOWCONTIG是显示指定的表的数据和索引的碎片信息。当运行该命令时,要特别注意逻辑碎片(Logical Fragmentation)和页密度(Page Density)两个指标。 Page Scanned-扫描页数: 如果你知道行的近似尺寸和表或索引里的行数,那么你可以估计出索引里的页数。看看扫描页数,如果明显比你估计的页数要高,说明存在内部碎片。 Extents

什么情况下需要创建MySQL索引

岁酱吖の 提交于 2020-03-02 07:39:12
索引可以提高数据的检索效率,也可以降低数据库的IO成本,并且索引还可以降低数据库的排序成本。排序分组操作主要消耗的就是CPU资源和内存,所以能够在排序分组操作中好好的利用索引将会极大地降低CPU资源的消耗。 如何判定是否需要创建索引? 1、较频繁地作为查询条件的字段 这个都知道。什么是教频繁呢?分析你执行的所有SQL语句。最好将他们一个个都列出来。然后分析,发现其中有些字段在大部分的SQL语句查询时候都会用到,那么就果断为他建立索引。 2、唯一性太差的字段不适合建立索引 什么是唯一性太差的字段。如状态字段、类型字段。那些只存储固定几个值的字段,例如用户登录状态、消息的status等。这个涉及到了索引扫描的特性。例如:通过索引查找键值为A和B的某些数据,通过A找到某条相符合的数据,这条数据在X页上面,然后继续扫描,又发现符合A的数据出现在了Y页上面,那么存储引擎就会丢弃X页面的数据,然后存储Y页面上的数据,一直到查找完所有对应A的数据,然后查找B字段,发现X页面上面又有对应B字段的数据,那么他就会再次扫描X页面,等于X页面就会被扫描2次甚至多次。以此类推,所以同一个数据页可能会被多次重复的读取,丢弃,在读取,这无疑给存储引擎极大地增加了IO的负担。 3、更新太频繁地字段不适合创建索引 当你为这个字段创建索引时候,当你再次更新这个字段数据时,数据库会自动更新他的索引