索引

Mysql 多种Count写法的区别

*爱你&永不变心* 提交于 2020-02-25 18:34:33
今天我们来看看count的不同实现方式 count(*) 的实现方式 先来看一下 coun(*)的实现,MyISAM和InnoDB的实现上是不同的 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count( ) 的时候会直接返回这个数,效率很高; 而 InnoDB 引擎就麻烦了,它执行 count( ) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数 如果加了 where条件的话,MyISAM 表也是不能返回得这么快的 为什么 InnoDB 不跟 MyISAM 一样,也把数字存起来呢? 这是因为即使是在同一个时刻的多个查询,由于多版本并发控制(MVCC)的原因, InnoDB 表应该返回多少行也是不确定的 这和 InnoDB 的事务设计有关系,可重复读是它默认的隔离级别,在代码上就是通过MVCC 来实现的。每一行记录都要判断自己是否对这个会话可见,因此对于 count(*) 请求来说,InnoDB只好把数据一行一行地读出依次判断,可见的行才能 够用于计算“基于这个查询”的表的总行数 InnoDB 是索引组织表,主键索引树的叶子节点是数据,而普通索引树的叶子节点是主键值。所以,普通索引树比主键索引树小很多。对于count(*) 这样的操作,遍历哪个索引树得到的结果逻辑上都是一样的。因此,MySQL 优化器会找到最小的那棵树来 遍历。在保证逻辑正确的前提下

应有尽有的MySQL 的覆盖索引与回表

我怕爱的太早我们不能终老 提交于 2020-02-25 16:11:03
两大类索引 使用的存储引擎:MySQL5.7 InnoDB 聚簇索引 * 如果表设置了主键,则主键就是聚簇索引 * 如果表没有主键,则会默认第一个NOT NULL,且唯一(UNIQUE)的列作为聚簇索引 * 以上都没有,则会默认创建一个隐藏的row_id作为聚簇索引 由此可见,使用聚簇索引查询会很快,因为可以直接定位到行记录。 普通索引 InnoDB的普通索引叶子节点存储的是主键(聚簇索引)的值,而MyISAM的普通索引存储的是记录指针。 示例 建表 mysql> create table user( -> id int( 10 ) auto_increment, -> name varchar( 30 ), -> age tinyint( 4 ), -> primary key ( id ), -> index idx_age ( age ) -> )engine=innodb charset=utf8mb4 ; id 字段是聚簇索引,age 字段是普通索引(二级索引) 填充数据 insert into user(name,age) values( '张三' , 30 ); insert into user(name,age) values( '李四' , 20 ); insert into user(name,age) values( '王五' , 40 ); insert

MySql的修改表操作

徘徊边缘 提交于 2020-02-25 15:29:58
表结构代码如下: mysql> show create table person; | person | CREATE TABLE `person` ( `number` int(11) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `birthday` date DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 | 删除列: 复制代码 代码如下: ALTER TABLE person DROP COLUMN birthday; 添加列: 复制代码 代码如下: ALTER TABLE person ADD COLUMN birthday datetime; 修改列,把number修改为bigint: 复制代码 代码如下: ALTER TABLE person MODIFY number BIGINT NOT NULL; 或者是把number修改为id,类型为bigint: 复制代码 代码如下: ALTER TABLE person CHANGE number id BIGINT; 添加主键: 复制代码 代码如下: ALTER TABLE person ADD PRIMARY KEY (id); 删除主键: 复制代码 代码如下: ALTER TABLE person DROP

利用python进行数据分析(笔记)

a 夏天 提交于 2020-02-25 00:36:41
《利用python进行数据分析(第二版)》笔记 numpy使用 函数 说明 abs/fabs 计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs sqrt 计算各元素的平方根。相当于arr**0.5 square 计算各元素的平方。相当于arr**2 exp 计算各元素的指数e^x log/log10/log2/log1p 分别为自然对数(底数为e)、底数为10的log、底数为2的log、log(1 + x) sign 计算各元素的正负号:1(正数)、0(零)、-1(负数) ceil 计算各元素的ceiling值,即大于等于该值的最小整数 floor 计算各元素的floor值,即小于等于该值的最大整数 rint 将各元素四舍五入到最接近的整数,保留dtype modf 将数组的小数和整数部分以两个独立数组的形式返回 isnan 返回一个表示“哪些值是NaN”的布尔型数组 isfinite/isinf 分别返回一个表示“哪些元素是有穷的(非ing,非NaN)”或“哪些元素是无穷的”的布尔型数组 cos/cosh/sin/sinh/tan/tanh 普通型和双曲型三角函数 arccos/arccosh/arcsin/arcsinh/arctan/arctanh 反三角函数 logical_not 计算各元素not x的真值。相当于-arr add

MySQL重要知识点(总结)

拥有回忆 提交于 2020-02-24 20:29:00
最近一段时间都学习mysql,将重要的知识点总结如下: 一、字段、表、索引设计规范相关 二、事务相关 三、锁相关 四、存储引擎相关 五、大表优化相关 六、索引优化相关 七、语句优化相关 一、字段、表、索引设计规范 1、字段设计规范 ① 字段类型优先选择符合存储需要的最小类型 字段类型优先级:整型>date;time >enum>char;varchar>blob 原因:整型,time运算快,节省内存;enum列内部是用整型存储的,char,varchar要考虑字符集的转换和排序的校对集,速度慢;blob无法使用临时表。 ② 够用就行(如smallint,varchar(N)) 原因:大的字段浪费内存,影响速度,如varchar(10),varchar(300),虽然存储的内容一样,但是,在表联查时,varchar(300)要花更多内存 ③ 尽量避免使用允许为null() 原因:null不利于索引,要用特殊的字节标注,在磁盘上占的空间其实更大 例子:建两个相同字段的表,一个允许为null,一个不允许。可以发现为null的索引更大些。 ④ 避免使用ENUM类型 修改ENUM值需要使用ALTER语句 ENUM类型的ORDER BY操作效率低,需要额外操作 禁止使用数值作为ENUM的枚举值 ⑤ 使用TIMESTAMP(4个字节)或DATETIME类型(8个字节)存储时间 TIMESTAMP

javascript中字符串操作函数

旧时模样 提交于 2020-02-24 18:51:12
1、charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码。 strObj.charCodeAt(index) 说明: index将被处理字符的从零开始计数的编号。有效值为0到字符串长度减1的数字。 如果指定位置没有字符,将返回NaN。 例如: var str = "http://www.hzhuti.com "; str.charCodeAt(0); 结果:65 2、fromCharCode方法从一些Unicode字符串中返回一个字符串。 String.fromCharCode([code1[,code2...]]) 说明: code1,code2...是要转换为字符串的Unicode字符串序列。如果没有参数,结果为空字符串。 例如: String.fromCharCode(65,66,112); 结果:ABp 3、charAt方法返回指定索引位置处的字符。如果超出有效范围的索引值返回空字符串。 strObj.charAt(index) 说明: index想得到的字符的基于零的索引。有效值是0与字符串长度减一之间的值。 例如: 代码如下 复制代码 var str = "ABC"; str.charAt(1); 结果:B 4、slice方法返回字符串的片段。 strObj.slice(start[,end]) 说明:

day05

倾然丶 夕夏残阳落幕 提交于 2020-02-24 17:35:37
第四天的总结 今天主要学习了六个重要的知识点 数字类型 讲了数字类型的相互转换, 数字类型分为三种,int ,bool ,float 今天也再次提到了bool类型的本质就是int类型 其中还提到了一个方法isinstance(变量名称,int) 可以通过这个方法来判断是不是int类型 数据类型的重点就是他们之间的相互转换 字符串类型 字符串类型分为单行字符串和多行字符串 在使用的过程中可以使用引号的嵌套,在不转意的情况下使用,这样看起来代码就比较简练 字符串的常规操作 主要讲了,在使用字符串的时候的一下方法 它主要讲了字符串的获取值,和字符串通过索引,切面来获取想要的一些值,其中需要注意的是 字符串是不能做删除操作的,还需要注意的就是 字符串的拼接,它是两个字符串相加的结果,它还包含了其他的类型和字符串的拼接 还有就是在字符串的成员运算中讲了一个方法就是判断这个字符是不是在这个字符串中 它的语法是 字符串名称 in 想要判断的字符串 重要的方法 1.索引(目标字符串的索引位置) # 1.索引(目标字符串的索引位置) s1 = '123abc呵呵' print(s1.index('b')) # 2.去留白(默认去两端留白,也可以去指定字符) s2 = '***好 * 的 ***' print(s2.strip('*')) # 3.计算子字符串个数 s3 = '12312312'

数据库基础知识

家住魔仙堡 提交于 2020-02-24 15:53:41
1、进入mysql 登陆数据库 mysql -uroot -p 2、增删改查 对应操作 命令 备注 增 insert into 表名(字段1,字段2,…) values(值1,值2,…); 删 delete from 表名 where…; 改 update 表名 set 修改的值 where …; 查 select 字段 from 表名 where …; 左右连接查询 命令 左连接 select * from table1 left join table2 on table1.name = table2.name; 右连接 select * from table1 right join table2 on table1.name = table2.name; 3、数据库索引 ① mysql的底层引擎为InnoDB,索引是一种数据结构; ② 在mysql中采用的方式为B-tree,一般情况下,B-tree和B+tree索引相同; ③ B-tree的高度决定了索引搜索的次数,3层也就是搜索三次即可找到目标数据; ④ B-tree的数据都是存放在叶节点当中; 对应操作 命令 备注 创建单值索引 create index 索引名 on 表名(字段); 创建唯一索引 create unique index 索引名 on 表名(字段); 字段属性为primary key的为主键索引

全文检索

独自空忆成欢 提交于 2020-02-24 15:37:51
什么是全文检索 数据分类 我们生活中的数据总体分为两种:结构化数据和非结构化数据。 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。 非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件 结构化数据搜索 常见的结构化数据也就是数据库中的数据。在数据库中搜索很容易实现,通常都是使用sql语句进行查询,而且能很快的得到查询结果。 为什么数据库搜索很容易? 因为数据库中的数据存储是有规律的,有行有列而且数据格式、数据长度都是固定的。 非结构化数据查询方法 (1)顺序扫描法(Serial Scanning) 所谓顺序扫描,比如要找内容包含某一个字符串的文件,就是一个文档一个文档的看,对于每一个文档,从头看到尾,如果此文档包含此字符串,则此文档为我们要找的文件,接着看下一个文件,直到扫描完所有的文件。如利用windows的搜索也可以搜索文件内容,只是相当的慢。 (2)全文检索(Full-text Search)     将非结构化数据中的一部分信息提取出来,重新组织,使其变得有一定结构,然后对此有一定结构的数据进行搜索,从而达到搜索相对较快的目的。这部分从非结构化数据中提取出的然后重新组织的信息,我们称之索引。     例如:字典。字典的拼音表和部首检字表就相当于字典的索引,对每一个字的解释是非结构化的,如果字典没有音节表和部首检字表

Python初学01-15天小结

梦想的初衷 提交于 2020-02-24 14:01:48
1.变量和简单数据类型 1.变量的命名: 变量名只能由字母、数字和下划线组成,由字母和下划线开头。 不能将关键字或函数名作为变量名。 2.字符串: 字符串在Python中用引号(单引号或双引号)括起来。 可以用 + 来实现字符串的拼接,用 * 来重复一个字符串的内容。 title()方法将字符串中每个单词转化为首字母大写。 upper()方法将字母全部转换为大写。 lower()方法将字母全部转化为小写。 rstrip()方法删除字符串结尾的空白。 lstrip()方法删除字符串开头的空白。 strip()方法删除字符串两端的空白。 3.数字: 整型:Python中可以处理任意大小的整数,而且支持二进制、八进制、十进制、十六进制。 浮点型:浮点数即小数,除了数学写法(如123.456)还支持科学计数法(如1.23456e2)。 复数:形如3+5j。 **4.布尔型:**布尔值只有True和False两种值,在Python中,可以直接用True和False表示布尔值(注意大小写),也可以通过布尔运算计算出。来。 5.注释: 单行注释:以# 开头的部分。 多行注释:用三个引号(单引号或双引号)括起来的部分。 2.列表的简介: 1.列表是什么: 列表由一系列按特定顺序排列的元素组成。用方括号([ ])表示列表,用逗号分隔其中元素。 lists = [ 'a' , 'b' , 'c' ,