首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

numpy和pandas库实战——批量得到文件夹下多个CSV文件中的第一列数据并求其最值

/前言/ 前几天群里有个小伙伴问了一个问题,关于Python读取文件夹下多个CSV文件中的第一列数据并求其最大值和最小值,大家讨论的甚为激烈,在此总结了两个方法,希望后面有遇到该问题的小伙伴可以少走弯路...2、现在我们想对第一列或者第二列等数据进行操作,以最大值和最小值的求取为例,这里以第一列为目标数据,来进行求值。 ?...3、其中使用pandas库来实现读取文件夹下多个CSV文件中的第一列数据并求其最大值和最小值的代码如下图所示。 ? 4、通过pandas库求取的结果如下图所示。 ?...通过该方法,便可以快速的取到文件夹下所有文件的第一列的最大值和最小值。 5、下面使用numpy库来实现读取文件夹下多个CSV文件中的第一列数据并求其最大值和最小值的代码如下图所示。 ?...6、通过numpy库求取的结果如下图所示。 ? 通过该方法,也可以快速的取到文件夹下所有文件的第一列的最大值和最小值。

9.5K20

快速查询的秘籍—B+树索引下

这时候二级索引就派上用场了,我们可以多创建几颗B+树,举个例子,我们把c2列创建索引,这类二级索引与聚簇索引有些不同,如下所示。 使用记录主键值的大小进行记录和页的排序。...首先根据目录项查询第一条c2=4的目录项所在的页。 在B+树中叶子节点查询出符合要求的c2与主键的值。 每查询出一条就根据主键去聚簇索引中查询我们所需要的记录。...联合索引 大家上面二级索引理解了,联合索引就非常简单了,举个例子,我们以c2与c3来创建个联合索引,如下所示。 使用记录主键值的大小进行记录和页的排序。...有一点需要注意,联合索引在创建时,优先根据c2列排序,当c2的值相同时,在根据c3排序。其实看到这里大家就知道了,联合索引应该怎么去用才会命中索引了。...1、MyISAM将表数据根据插入顺序全部存放到一个数据文件中。 2、把表的索引信息单独存到索引文件中,每个主键都会创建一个索引信息,然而树的叶子节点存储的是索引+行号信息。

33110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【图文详解:索引极简教程】SQL 查询性能优化原理

    简介 在一本厚厚的书籍的前几页,通常会有几页目录。作用是让读者可以快速找到感兴趣的章节进行阅读。 目录之所以可以快速阅读,是因为它提前进行了结构化+有序处理。...同样的道理,数据库的数据表的文件下面(以 ClickHouse 为例),通常也有索引文件(目录 primary.idx)加上数据文件(正文页 data.bin), 使得查询快速。...; 根据where条件中的name进行检索,由于name是非主键索引,按B+树进行二分查找,查找到Mark,然后再根据data域的主键ID,但这里要查询的数据是id和name,id正好是主键,在非主键索引中的叶子节点中的数据域中...因为联合索引中是先根据年龄进行排序的。如果年龄没有先确定,直接对姓氏和名字进行查询的话,就相当于乱序查询一样,因此索引无法生效。 因此查询是全表查询。...最左原则:联合索引的B+Tree是按照第一个关键字进行索引排列的: order by col1,col2,col3 联合索引的列顺序 联合索引的列顺序是非常讲究的,以id列在前、name列在后为例。

    74321

    索引的数据结构(2)

    各个存放 用户记录的页 也是根据页中用户记录的主键大小顺序排成一个 双向链表 。 存放 目录项记录的页 分为不同的层次,在同一层次中的页也是根据页中目录项记录的主键 大小顺序排成一个 双向链表 。...B+树的 叶子节点 存储的是完整的用户记录。 所谓完整的用户记录,就是指这个记录中存储了所有列的值(包括隐藏列)。...联合索引 我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比方说我们想让B+树按 照 c2和c3列 的大小进行排序, 这个包含两层含义:      先把各个记录和页按照c2列进行排序...在记录的c2列相同的情况下,采用c3列进行排序 注意一点,以c2和c3列的大小为排序规则建立的B+树称为 联合索引 ,本质上也是一个二级索引。...小结两种引擎中索引的区 别: ① 在InnoDB存储引擎中,我们只需要根据主键值对 聚簇索引 进行一次查找就能找到对应的记录,而在MyISAM 中却需要进行一次 回表 操作,意味着MyISAM中建立的索引相当于全部都是

    48840

    从根儿上理解MySQL索引

    但是一个数据页中的记录可能非常多,为了逃避低效的遍历,InnoDB引擎的设计者想出了一种绝妙的搜索方法,把数据页中的所有记录(包括伪记录)分成若干个小组(并对每个小组内的组员数量做了规定),每个小组选出组内最大的一条记录作为...,但是InnoDB存储引擎不知道你要查找的记录所在的页号,那也只能从第一页开始沿着双向链表一直进行查找,遍历每一页,至于在每一个数据页中是怎么查找的,你已经很清楚了。...图片这棵B+树和聚簇索引的B+树有点区别:叶子节点存放的不再是完整的用户记录,而是只记录name列和主键值;数据页中存放的用户记录和目录项记录由原本的按照主键排序变为按照name列排序;目录项记录除了存储索引列...3.3 联合索引假设我们为name列和phone列建立联合索引(注意我描述的顺序),自然也是创建一棵B+树,这棵B+树和之前又稍微有点不同:叶子节点存放的是name列、phone列和主键值;目录项记录除了存储索引列...(name、phone)和页号之外,同时还存储了主键值;(大家可以想一想,为什么要存储主键值)数据页中存放的用户记录和目录项记录由原本的按照主键排序变为按照name列排序,如果name列相同,那就按照phone

    46171

    索引-mysql详解(三)

    这样的组成之后就是b+树。 聚簇索引:当使用记录主键为值大小进行记录和页的排序,组成一个单向链表,各个存放数据的页是双向链表,b+树叶子节点存储的是完整的记录数(包括隐藏列)。...二级索引:当不能以主键为查询条件来进行搜索的时候,这时候该怎么办呢,当我们以其他列来建立索引,以其他列来排序组成单向链表,存放数据的页组成双向链表,这种b+树的叶子节点存放的不是所有的数据,存放的时候二级索引和主键...联合索引:每个记录页都是列+页码组成,联合索引是两个列以上,先按前面的列进行排序,如果一致,则按后面的列进行排序,本质上也是一个二级索引,如果是联合索引则只会建立一颗b+树,如果联合索引的两个列分开创建索引...前面说的都是innodb,那么,MyISAM中的索引如何存储的呢?...1排序的时候也必须建立索引来排序,如果没有建立索引的排序这时候就属于filesort,文件排序,这时候是非常缓慢的。 2联合索引列的排序必须一致,不能一个列asc一个列desc。

    38820

    MySQL中InnoDB及索引深入剖析

    在没有索引的情况下,不论是根据主键列或者其他列的值进行查找,由于我们并不能快速的定位到记录所在的页,所以只能从第一个页沿着双向链表一直往下找,在每一个页中根据我们刚刚唠叨过的查找方式去查找指定的记录。...联合索引 我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比方说我们想让B+树按照c2和c3列的大小进行排序: 先把各个记录和页按照c2列进行排序。...在MySQL中,把这种在内存中或者磁盘上进行排序的方式统称为文件排序(英文名:filesort)。...不可以使用索引进行排序的几种情况 1.ASC、DESC混用 对于使用联合索引进行排序的场景,我们要求各个排序列的排序顺序是一致的,也就是要么各个列都是ASC规则排序,要么都是DESC规则排序。...假设某个列的基数为1,也就是所有记录在该列中的值都一样,那为该列建立索引是没有用的,因为所有值都一样就无法排序,无法进行快速查找了。

    73510

    10张图,搞懂索引为什么会失效?

    对name和age列建立联合索引 目录页由name列,age列,页号这三部分组成。目录会先按照name列进行排序,当name列相同的时候才对age列进行排序。...数据页由name列,age列,主键值这三部分组成。同样的,数据页会先按照name列进行排序,当name列相同的时候才对age列进行排序。 ?...如果只查列值b,并不能用到这个排序规则,所以得遍历所有的记录 加速排序 最左前缀原则不仅用在查询中,还能用在排序中。...MySQL中,有两种方式生成有序结果集: 通过有序索引顺序扫描直接返回有序数据 Filesort排序,对返回的数据进行排序 因为索引的结构是B+树,索引中的数据是按照一定顺序进行排列的,所以在排序查询中如果能利用索引...所有不是通过索引直接返回排序结果的操作都是Filesort排序,也就是说进行了额外的排序操作。

    1.2K40

    Mysql的SQL优化指北

    由于联合索引在B+树中是按照索引的先后顺序进行排序的,所以在索引idx_name_birthday_phone_number中,先按照name列的值进行排序,如果name列的值相同,则按照birthday...联合索引使用问题 B+树中每层节点都是按照索引列的值从小到大的顺序而形成了一个单链表。如果是联合索引的话,则页面和记录先按照联合索引前边的列排序,如果该列值相同,再按照联合索引后边的列排序。...匹配范围值 在使用联合索引进行范围查找时候,如果对多个列同时进行范围查找的话,只有对索引最左边的那个列进行范围查找的时候才能用到B+树索引。...ASC、DESC混用是不能使用到索引的 对于使用联合索引进行排序的场景,我们要求各个排序列的排序顺序是一致的,也就是要么各个列都是ASC规则排序,要么都是DESC规则排序。...如果要排序的数据量小于sort_buffer_size,排序就在内存中完成。但如果排序数据量太大,内存放不下,则不得不利用磁盘临时文件辅助排序。

    98320

    MySql知识体系总结(2021版)请收藏!!

    2、第二层负责解析查询 编译SQL,并对其进行优化(如调整表的读取顺序,选择合适的索引等)。...InnoDB:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。...当表在创建之后并导入数据之后,不会再进行修改操作,可以使用压缩表,极大的减少磁盘的空间占用。 InnoDB:需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。...5、 AUTO_INCREMENT MyISAM:可以和其他字段一起建立联合索引。引擎的自动增长列必须是索引,如果是组合索引,自动增长可以不是第一列,他可以根据前面几列进行排序后递增。...通过根据联接类型浏览所有行并为所有匹配WHERE子句的行保存排序关键字和行的指针来完成排序。然后关键字被排序,并按排序顺序检索行。

    1.3K10

    Mysql的SQL性能优化指北

    由于联合索引在B+树中是按照索引的先后顺序进行排序的,所以在索引idx_name_birthday_phone_number中,先按照name列的值进行排序,如果name列的值相同,则按照birthday...联合索引使用问题 B+树中每层节点都是按照索引列的值从小到大的顺序而形成了一个单链表。如果是联合索引的话,则页面和记录先按照联合索引前边的列排序,如果该列值相同,再按照联合索引后边的列排序。...ASC、DESC混用是不能使用到索引的 对于使用联合索引进行排序的场景,我们要求各个排序列的排序顺序是一致的,也就是要么各个列都是ASC规则排序,要么都是DESC规则排序。...匹配列前缀 和联合索引其实有点类似,如果一个字段比如是varchar类型的name字段,那么在索引中name字段的排列就会: 先比较字符串的第一个字符,第一个字符小的那个字符串就比较小 如果两个字符串的第一个字符相同...如果要排序的数据量小于sort_buffer_size,排序就在内存中完成。但如果排序数据量太大,内存放不下,则不得不利用磁盘临时文件辅助排序。

    88010

    联合索引在B+树上的存储结构及数据查找方式

    联合索引的所有索引列都出现在索引数上,并依次比较三列的大小。上图树高只有两层不容易理解,下面是假设的表数据以及我对其联合索引在B+树上的结构图的改进。PS:基于InnoDB存储引擎。 ?...对于联合索引,存储引擎会首先根据第一个索引列排序,如上图我们可以单看第一个索引列,如,1 1 5 12 13....他是单调递增的;如果第一列相等则再根据第二列排序,依次类推就构成了上图的索引树,上图中的...存储引擎首先从根节点(一般常驻内存)开始查找,第一个索引的第一个索引列为1,12大于1,第二个索引的第一个索引列为56,12小于56,于是从这俩索引的中间读到下一个节点的磁盘文件地址,从磁盘上Load这个节点...我们看,联合索引是首先使用多列索引的第一列构建的索引树,用上面idx_t1_bcd(b,c,d)的例子就是优先使用b列构建,当b列值相等时再以c列排序,若c列的值也相等则以d列排序。...,然后定位到名,进而找到电话号码,因为所有的姓从上到下按照既定的规则(首字母排序)是有序的,而名是在姓的首字母一定的条件下也是按照名的首字母排序的,但是整体来看,所有的名放在一起是无序的,所以如果只知道名查找起来就比较慢

    3.2K20

    1w字MySQL索引面试题(附md文档)

    通俗的讲就是,如果索引的列在 select 所需获得的列中(因为在 mysql 中索引是根据索引列的值进行排序的,所以索引节点中存在该列中的部分值)或者根据一次索引查询就能获得记录就不需要回表,如果 select...如果我们根据索引来进行查询,select * from user where age >20 ,这时候需要回表,原因是通过非主键索引列进行查询时,先搜索age索引树,第一次通过索引age取回id,第二次...,建立到联合索引里去 示例: select * from user where age > 20 ; 第一次 取回id,第二次(回表)根据id拿到完整数据 使用联合索引 age,name -> index...总结: 未开启索引下推: 根据筛选条件在索引树中筛选第一个条件 获得结果集后回表操作 进行其他条件筛选 再次回表查询 开启索引下推:在条件查询时,当前索引树如果满足全部筛选条件,可以在当前树中完成全部筛选过滤...单路排序(快) 从磁盘读取查询需要的所有列,按照order by列在buffer对它们进行排序,然后扫描排序后的列表进行输出, 它的效率更快一些,避免了第二次读取数据。

    33520

    高并发之存储篇:关注下索引原理和优化吧!躲得过实践,躲不过面试官!

    由于 kafka 的定位是进行稳定的高性能数据读写。所以对磁盘来说,是采用顺序读写的方式,落在了一些 .log 文件中,并以基准偏移量补0命名。...而这个索引方式就是我们常说的聚蔟索引。即使用主键值进行记录和页的排序,且叶子节点含有全部用户数据。 寻求改进:如果我想用其他列来查询,怎么办?...6扩展:二级索引、联合索引 二级索引 比如用户需要根据某一列(a列)的值来查询,那就再重新创建一个B+树。...联合索引 二级索引是除主键外的单列索引,而联合索引则是多个列共同排序。假设用户需要用a 、b 两个列进行有序查询,那内在含义是,在a列值相同的情况下,再判断b的值。...同二级索引一样,InnoDB也需要再创建一棵B+树,且目录项的排序按先a,后b进行排序串联,叶子节点的数据项只包含 a 、b、主键三个值。

    85420

    最左前缀有手就会,那索引下推呢?

    这里的排序,意思是确定了第一个键,对于第一个键相同的记录来说,查询的结果是对第二个键进行了排序。 这也是**使用联合索引的第二个好处,即已经对第二个键值进行了排序处理,可以避免多一次排序操作。...显然,name 字段是要比 age 字段大的,所以,第二种选择占用的空间要小于第一种选择,推荐大伙儿使用第二种选择:联合索引 (name, age) + 单字段索引 (age) 索引下推 最左前缀可以用于在索引中定位记录...= 20 and sex = male 《高性能 MySQL》 书中提到:对于联合索引,如果查询中有某个列的范围查询,则其右边所有列都无法使用索引进行快速定位 所以对于这条语句来说,其实并不能完全踩中...20,对于不等于 20 的记录,直接判断并跳过,所以只需要对 ID1 这条记录进行回表判断就可以了。...另外,如果有对 a,b,c 的联合条件查询的话,并且 a 是模糊匹配或者说是范围查询的话,其实并不能完全踩中联合索引(a,b,c),a 列右边的所有列都无法使用索引进行快速定位了。

    46020

    图文并茂说MySQL索引——入门进阶必备

    他们其实都是在聚集索引上操作的(聚集索引B+树的叶子结点是根据主键排好序的完整的用户记录,包含表里的所有字段),区别就在于   全表扫描将聚集索引B+树的叶子结点依次顺序扫描并判断条件,在以下几种情况会走全表扫描...确定第一条符合c2 = 4的用户记录所在的页。 找到符合c2 = 4的第一条用户记录。找到该记录后,由于只存储了c2列和主键c1,所以需要根据该记录的主键信息到聚集索引中查找完整的用户记录(回表)。...---- 5.联合索引   我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比如说我们想让B+树按照c2和c3列的大小进行排序,那么 先把各个记录和页按照c2列进行排序。...在记录的c2列相同的情况下,采用c3列进行排序 为c2和c3列建立的索引,如下:   每条目录项记录都由c2、c3、页号这三个部分组成,各条记录先按照c2列的值进行排序,如果记录的c2列相同,则按照c3...MRR优化的设计思路如下: 根据非聚集索引a,定位到满足条件的记录,将id值放入read_rnd_buffer中; 将read_rnd_buffer中的id进行递增排序; 排序后的id数组,依次到主键id

    29210

    MySQL是怎样存储数据的?

    ' 其中包含日志与数据文件,日志包括:redo log、bin log、慢SQL日志、错误日志等,而数据文件包括系统的和我们创建的 在data目录中以库为单位生成目录,库的目录中存储表相关的文件 在Innodb...、info 聚簇索引中的记录则会以id升序并存储所有列的信息 建立age、student_name的联合索引(二级索引) 二级索引中记录则只存储age、student_name、id的信息,并以age、...student_name、id的顺序升序排序 当age相等时,根据student_name升序排序;当student_name相等时,再根据id升序排序 如果使用二级索引时要获取完整数据还需要回表查询聚簇索引...“路由”,真正的数据存储在叶子节点中的记录 页内记录按照索引列升序排序维护成单向链表,同层级的页与页之间维护成双向链表方便范围查询 页中记录会分为多个组,记录每个组中最大记录维护成升序列表,当查找时在升序列表上使用二分法进行查找...聚簇索引以主键值升序排序并存储完整数据,如果未规定主键则在记录的隐藏列自动记录 二级索引则按照索引列进行排序,并且只存储索引列和主键的数据,如果使用二级索引时要获取完整数据还需要回表查询聚簇索引 最后

    17431

    一文带你深入理解Mysql索引底层数据结构与算法

    Hash 优点: 对数据进行Hash(散列)运算,主流的Hash算法有MD5、SHA256等等,然后将哈希结果作为文件指针可以从索引文件中获得数据的文件指针,再到数据文件中获取到数据,按照这样的设计,...3.最后到了叶子节点,加载到内存查找到了30,直接返回 如果要查询id>30的数据 1.会先定位30的数据 2.因为叶子节点的指针链路是排好序的,所以会直接根据30的索引值,往右的所有值查询出来...= 'eeee' ====不会执行联合索引 从上面的例子中可以知道,只会第一条才会执行联合索引,那是为什么呢 这就回到本文第一句话,索引是获取数据排好序的数据结构,所以我们再做查询的时候,肯定会先根据...mysql会优先以联合索引的第一列开始匹配,此后才会匹配下一列,如果不指定第一列匹配的值,那么也就无法知道下一步要查询那个节点(可以联想B+树的数据结构,第一列匹配到值后,会进行一次数据结构的排序筛选,...得出排好序的数据结构,在进行匹配下一列,得出最终结果,那么如果直接跳过第一列,匹配第二列,b+树会无法找到排好序的数据结构结果,就会进行全表扫描) 另外一种情况,如果遇到 ">"、"<"、"between

    70610

    MySql学习——MySql中的索引详解

    比方说我们用c2列的大小作为数据页、页中记录的排序规则,再建一棵B+树,效果如下图所示: 这个B+树与上边介绍的聚簇索引有几处不同: 使用记录c2列的大小进行记录和页的排序,这包括三个方面的含义:...各个存放用户记录的页也是根据页中记录的c2列大小顺序排成一个双向链表。 存放目录项记录的页分为不同的层次,在同一层次中的页也是根据页中目录项记录的c2列大小顺序排成一个双向链表。...2.3 联合索引 我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比方说我们想让B+树按照c2和c3列的大小进行排序,这个包含两层含义: 先把各个记录和页按照c2列进行排序。...在记录的c2列相同的情况下,采用c3列进行排序 以c2和c3列的大小为排序规则建立的B+树称为联合索引,本质上也是一个二级索引。...这一点和InnoDB是完全不相同的,在InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录,而在MyISAM中却需要进行一次回表操作,意味着MyISAM中建立的索引相当于全部都是二级索引

    2.1K20

    MySql学习——MySql中的索引详解

    比方说我们用c2列的大小作为数据页、页中记录的排序规则,再建一棵B+树,效果如下图所示: 这个B+树与上边介绍的聚簇索引有几处不同: 使用记录c2列的大小进行记录和页的排序,这包括三个方面的含义:...各个存放用户记录的页也是根据页中记录的c2列大小顺序排成一个双向链表。 存放目录项记录的页分为不同的层次,在同一层次中的页也是根据页中目录项记录的c2列大小顺序排成一个双向链表。...2.1.2 联合索引 我们也可以同时以多个列的大小作为排序规则,也就是同时为多个列建立索引,比方说我们想让B+树按照c2和c3列的大小进行排序,这个包含两层含义: 先把各个记录和页按照c2列进行排序。...在记录的c2列相同的情况下,采用c3列进行排序 以c2和c3列的大小为排序规则建立的B+树称为联合索引,本质上也是一个二级索引。...这一点和InnoDB是完全不相同的,在InnoDB存储引擎中,我们只需要根据主键值对聚簇索引进行一次查找就能找到对应的记录,而在MyISAM中却需要进行一次回表操作,意味着MyISAM中建立的索引相当于全部都是二级索引

    1.3K30
    领券