索引

MySQL——索引

牧云@^-^@ 提交于 2020-03-04 15:51:44
1 索引的常见模型 1.1 哈希表 哈希表是一种以键-值(key-value)存储数据的结构,只要输入待查找的键key, 就可以找到对应的值value。 哈希表适用于做等值查询(即查找的key值在表中有对应),但是哈希索引做区间查询的速度是很慢的 1.2 有序数组 查找数据的时间复杂度是O(log(N))。仅看查询效率,有序数组是一种非常好的数据结构,但是更新数据比较慢,因为要做数据的挪动工作。所以,有序数据只适用于静态存储引擎。 1.3 N叉搜索树 多叉树就是每个结点有多个儿子,儿子之间的大小保证从左到右递增。二叉搜索树效率是最高的,但是实际大多数的数据库存储并不使用二叉树,原因是,索引不止存在内存中,还要写到磁盘上。为了尽量少地读磁盘,一般使用N叉树。N取决于数据块的大小。 2 InnoDB的索引模型 2.1主键索引与非主键索引 在InnoDB中,表都是根据主键顺序以索引的形式存放的,这种存储方式称为索引组织表。InnoDB使用B+树索引模型,所以数据都是存储在B+树中的。 索引类型分为 主键索引 和 非主键索引 。 主键索引 的叶子结点是整行数据。在InnoDB中,主键索引也被称为聚簇索引(clustered index)。 非主键索引 的叶子结点是主键的值。在InnoDB中,非主键索引也被称为二级索引。 2.2 索引维护 自增主键是指自增列上定义的主键,在建表语句中一般是

Python中拷贝是有深度的!

六眼飞鱼酱① 提交于 2020-03-04 06:07:02
文章目录 列表的拷贝 实现深度拷贝 列表的拷贝 开始学习Python的时候我们应该在很多地方听到或学到这样一个问题,就是s = l[:],s(列表)可以实现l(列表)的拷贝: l = [ 1 , 3 , 6 ] s = l [ : ] print ( s , l is s ) 结果为: [1, 3, 6] False 显而易见,我们得到了l的一个副本,就是l与s只是值相同。我们可以测试下: s [ 0 ] = 99 print ( l , s ) 结果为: [1, 3, 6] [99, 3, 6] 就这个例子来说我们实现了拷贝。但是!并不是l[:]就能实现拷贝,这是由Python拷贝的深度决定的,举个例子: l = [ [ 1 , 3 , 8 ] , 6 , 7 ] s = l [ : ] print ( l is s , l [ 0 ] is s [ 0 ] ) 结果: False True 显然我们实现了l的拷贝,但是却不能将嵌套在l内部的列表一起复制了。个人认为这就是拷贝深度的问题!我们看下带来的问题: s [ 0 ] [ 0 ] = - 99 print ( l , s ) 嵌套的列表是没有能够被拷贝的,s对嵌套的列表修改其元素都会影响l中的嵌套列表 [[-99, 3, 8], 6, 7] [[-99, 3, 8], 6, 7] 我们拷贝的是嵌套列表的索引

Java的String的常用方法

放肆的年华 提交于 2020-03-04 03:48:29
String的常用方法归纳与总结 char charAt(int index) 返回指定索引处的 char 值。 int compareTo(Object o) 把这个字符串和另一个对象比较。 int compareTo(String anotherString) 按字典顺序比较两个字符串。 int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 String concat(String str) 将指定字符串连接到此字符串的结尾。 boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 boolean equals(Object anObject) 将此字符串与指定的对象比较。 boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 byte[] getBytes() 使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 byte[] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 void getChars

数据分析--Pandas简介

ぃ、小莉子 提交于 2020-03-04 00:15:15
目录 Pandas 1、Pandas简介 1.1 Pandas的主要功能: 1.2 安装方法:pip install pandas 2、Series 3、DataFrame 4、时间对象处理 时间序列类型 5、数据分组和聚合 5.1、分组(GroupBY机制) 5.2、聚合(组内应用某个函数) 5.3、apply 6、其他常用方法 Pandas 1、Pandas简介 pandas是一个强大的Python数据分析的工具包,它是基于Numpy构建的,正因pandas的出现,让Python语言也成为使用最广泛而且强大的数据分析环境之一。 1.1 Pandas的主要功能: ​ -具备对其功能的数据结构DataFrame,Series ​ -集成时间序列功能 ​ -提供丰富的数学运算和操作 ​ -灵活处理缺失数据 1.2 安装方法:pip install pandas ​ 引用方法:import pandas as pd 2、Series Series是一种类似于一维数组的对象,由一组数据和一组与之相关的数据标签(索引)组成 2.1、创建方法 第一种:pd.Series([4,5,6]) # 默认索引 执行结果: 0 4 1 5 2 6 第二种: 自定义索引,index是一个索引列表,里面包含的是字符串,依然可以通过默认索引取值。 pd.Series([4,5,6,7,8],index=[

SQL调优

生来就可爱ヽ(ⅴ<●) 提交于 2020-03-04 00:12:03
SQL调优对提高项目的性能有着至关重要的作用,介绍几种常见的SQL调优方式,仅供参考。 1. 对查询进行优化,要尽量避免全表扫描(带*号的查询),首先应考虑在 where 及 order by 涉及的列上建立索引。 2. 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描, 如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库。 备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num = 0 3. 应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 4. 应尽量避免在 where 子句中使用 or 来连接条件, 如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描 , 如: select id from

视图、约束、索引

a 夏天 提交于 2020-03-03 22:05:19
一、视图 本质上相当于一张 “虚拟表” ,可当作独立的一张表进行操作(增、删、改、查) 作用: a) 可通过权限控制,只将 “表中的少数列” 暴露给数据库用户,而不让该用户直接操纵数据库中 “实际表” b) 可将 常用的,较复杂的SQL 在数据库中 预先定义好 ,使得外部调用不用每次都编写复杂的SQL语句, 直 接当作一张“虚拟表”来调用 即可 Customers表中原始数据: Orders表中的原始数据: 创建“查找运费在40到60之间的客户信息”的视图: 1 use edisondb; 2 3 if object_id('FortyToSixtyFreightCusts')is not null 4 drop view FortyToSixtyFreightCusts 5 go 6 create view FortyToSixtyFreightCusts 7 as 8 9 select C.custid as '客户ID',C.name as '客户名', C.age as '年龄' 10 from customers as C11 where Exists(12 select *13 from Orders as O14 where C.custid=O.custid and (O.freight between 40 and 60)15 ); 创建成功之后:

视图 索引

坚强是说给别人听的谎言 提交于 2020-03-03 21:24:01
在视图上创建索引需要三个条件: 一、视图必须绑定到架构。 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMA BI NDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,选中“绑定到架构”。 二、索引必须是唯一索引。 要做到这点,在 CREATE INDEX 中必须指定 UNIQUE。 三、索引必须是聚集索引。 要做到这点,在 CREATE INDEX 中必须指定 CLUSTERED。 例: CREATE VIEW viewFoo WITH SCHEMABINDING AS SELECT id... CREATE UNIQUE CLUSTERED INDEX index_viewFoo ON viewFoo(id) *************************************************************** 视图的要求 在视图上创建聚集索引之前,该视图必须满足下列要求: 当执行 CREATE VIEW 语句时,ANSI_NULLS 和 QUOTED_IDENTIFIER 选项必须设置为 ON。OBJECTPROPERTY 函数通过 ExecIsAnsiNullsOn 或 ExecIsQuotedIdentOn 属性为视图报告此信息。 为执行所有 CREATE TABLE 语句以创建视图引用的表,ANSI

[搜片神器]服务器SQL2005查询分页语句你理解了么

孤街浪徒 提交于 2020-03-03 14:02:51
在 sosobt.com 网站准备采用Lucence.net来进行索引处理搜索慢问题的时候,突然发现常用的分页获取数据的row_number也支持不住了,后期查到200多万的时候非常慢(总数据有500万),经过网上查询分析一些资料后,基本上搞明白是什么原因导致的,顺便纪录一下解决方案。 ------------------------------------ 网上找的几种sqlserver2005高效分页sql查询语句 top方案: sql codeselect top 10 * from table1 where id not in(select top 开始的位置 id from table1) max: sql codeselect top 10 * from table1 where id>(select max(id) from (select top 开始位置 id from table1order by id)tt) row: sql codeselect * from ( select row_number()over(order by tempcolumn)temprownumber,* from (select top 开始位置+10 tempcolumn=0,* from table1)t )tt where temprownumber>开始位置 3种分页方式

MySQL 索引:语法及案例剖析

拈花ヽ惹草 提交于 2020-03-03 09:33:16
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。 创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。 上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。 建立索引会占用磁盘空间的索引文件。 普通索引 创建索引 这是最基本的索引,它没有任何限制。它有以下几种创建方式: CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度

主键和索引的区别

删除回忆录丶 提交于 2020-03-03 09:15:55
主键(PRIMARY KEY) 表通常具有包含唯一标示表中每一行的值的一列或者一组列。这样的一列或者多列称为表的主键(PK),用于强制表的尸体完整性。在创建或者修改表时,您可以通过定义PK约束来创建主键。 一个表只能有一个PK约束,并且PK约束中的列不能接受空值。由于PK约束可以保证数据的唯一性,因此经常对标识列定义这种约束。 如果为表指定了PK约束,数据库引擎将通过为主键列创建唯一索引来强制数据的唯一性。当在查询中使用主键时,此索引还可以用来对数据进行快速访问。因此,所选的主键必须遵守创建唯一索引的规则。 创建主键时,数据库引擎会自动创建唯一的索引来强制实施PK约束的唯一性要求。如果表中不存在狙击索引或未显示指定非聚集索引,则将创建唯一的聚集索引以强制实施PK约束。 聚集索引 聚集索引给予数据行的兼职在表内排序和存储这些数据行。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。 每个表几乎都对列定义聚集索引来实现下列功能: 可用于经常使用的查询。 提供高度唯一性。 两者的比较 主键 聚集索引 用途 强制表的实体完整性 对数据行的排序,方便查询用 一个表多少个 一个表最多一个主键 一个表最多一个聚集索引 是否允许多个字段来定义 一个主键可以多个字段来定义 一个索引可以多个字段来定义 是否允许null值 如果要创建的数据列中数据存在null,无法创建主键