mysql 索引_MySQL之索引

0c6cc9079be7174fb92e390022014288.gif

索引查找算法BTREE

BTREE查找算法演變B-TREE :普通 BTREE,平衡多路查找樹(B-Tree)B+TREE :葉子節點雙向指針B++TREE(B*TREE):枝節點的雙向指針

普通B-TREE

c95c76ae50ecb62a7da485e1180eed8e.png

增強版B+TREE(B*TREE)

149d116a51a3ba622299e3cf0f68d4dd.png

總結:從上圖看出,在B+Tree上有兩個頭指針,一個指向根節點,另一個指向關鍵字最小的葉子節點,而且所有葉子節點(即數據節點)之間是一種鏈式環結構。B+Tree是在B-Tree基礎上的一種優化,使其更適合實現外存儲索引結構,InnoDB存儲引擎就是用B+Tree實現其索引結構。從上圖中的B-Tree結構圖中可以看到每個節點中不僅包含數據的key值,還有data值。而每一個頁的存儲空間是有限的,如果data數據較大時將會導致每個節點(即一個頁)能存儲的key的數量很小,當存儲的數據量很大時同樣會導致B-Tree的深度較大,增大查詢時的磁盤I/O次數,進而影響查詢效率。在B+Tree中,所有數據記錄節點都是按照鍵值大小順序存放在同一層的葉子節點上,而非葉子節點上只存儲key值信息,這樣可以大大加大每個節點存儲的key值數量,降低B+Tree的高度。而BTree,這個是以B+Tree為基礎,在非葉子結點(枝節點)上增加了鏈表指針,BTree的空間利用率更高。

MySQL中如何使用BTREE

1 聚簇索引

聚簇索引也叫集群索引,聚集索引。它不是一種單獨的索引類型,而是一種數據存儲方式。Innodb的聚簇索引實際上在同一個結構中保存了B*Tree索引和數據行。當表有聚簇索引時,數據行實際上存儲在索引的葉子節點中。聚簇的意思是表示數據行和相鄰的鍵值緊湊地存儲在一起。一個表只能有一個聚簇索引。也就是按照每張表的主鍵構成一棵B+樹,葉子節點中存放整張表的行記錄數據,也將聚集索引的葉子節點成為數據頁,每個數據頁之間通過一個雙向鏈表來進行鏈接。數據頁存放的是每行的所有記錄,非數據頁存放的是鍵值和指向數據頁的偏移量。它可以在葉子節點直接找到數據,且對于主鍵的排序查找和范圍查找速度非常快,因為聚集索引是邏輯上連續的。比如查詢后10條數據,由于B+樹索引是雙向鏈表,可以很快找到隨后一個數據頁,然后取出最后的10條數據。

①前提條件

1.如果表中設置了主鍵(例如ID列),自動根據ID列生成索引樹。2.如果沒有設置主鍵,自動選擇第一個唯一鍵的列作為聚簇索引3.如果沒有唯一鍵,自動生成隱藏的聚簇索引。4.在建表時,推薦創建主鍵為數字自增列。

②功能

1.錄入數據時,按照聚簇索引組織存儲數據,在磁盤上有序存儲數據行。2.加速查詢(基于ID作為條件的判斷查詢)。

③聚簇索引的B*Tree構建過程

a. 葉子節點:存儲數據行時就是有序的,直接將數據行的page作為葉子節點(相鄰的葉子結點,有雙向指針)b. 枝節點  :提取葉子節點ID的范圍+指針,構建枝節點(相鄰枝節點,有雙向指針)c. 根節點  :提取枝節點的ID的范圍+指針,構建根節點

8313463b70df424046647a2cef64bbf1.png

2 輔助索引

輔助索引需要人為創建輔助索引,將經常作為查詢條件的列創建輔助索引,起到加速查詢的效果。也稱非聚集索引,按照每張表創建的索引列創建一棵B+樹,葉子節點并不包含行記錄的全部數據。葉子節點包含鍵值 和 書簽,書簽用來告訴InnoDB存儲引擎在哪可以找到與索引對應的行數據,每張表可以有多個輔助索引。如果某個查詢是通過輔助索引查找數據的,則查找過程為:先遍歷輔助索引并找到葉節點找到指針獲取主鍵索引的主鍵,然后通過主鍵索引找到對應的頁從而找到一個完整的行記錄。注:沒執行一次查詢就是一次IO,比如 輔助索引樹高度為3,聚集索引樹高度為2,則通過輔助索引查詢數據時就要進行3+2次邏輯IO最終得到一個數據頁。

輔助索引的B*Tree 構建過程

a. 葉子節點:提取主鍵(ID)+輔助索引列,按照輔助索引列進行從小到大排序后,生成葉子節點。(多個輔助索引列,以最左邊的列為標準。相鄰的葉子結點,有雙向指針。)b. 枝節點  :提取葉子節點輔助索引列的范圍+指針,構建枝節點(相鄰枝節點,有雙向指針)c. 根節點  :提取枝節點的輔助索引列的范圍+指針,構建根節點

89e25e582f3b130c38175db32ecdf5f3.png

輔助索引查詢過程:

# 按照輔助索引列,作為查詢條件時。1. 查找輔助索引樹,得到ID值2. 拿著ID值回表(聚簇索引)查詢

①單列索引

只拿一個非主鍵列來創建索引,如下:

# 單列輔助索引 select * from test.t100w where k2='780P' # 優化方式: alter table 表名 add index 索引名(列名); mysql> alter table t100w add index idx_k2(k2);

②聯合索引

# 使用多個非主鍵列創建輔助索引mysql> alter table t100w add index idx_k1_num(k1,num);

③前綴索引

列值長度越長,數據量大的話,會影響到索引高度,需要使用前綴索引,也就是截取列值的前綴生成新的索引以提高效率。

# 判斷前綴長度多少合適:截取字符串之后得到的總記錄數越接近截取之前的越好,說明前綴的唯一性高!select count(distinct(left(name,5)))  from city ;select count(distinct name)  from city ;# 創建前綴索引mysql> alter table city add index idx_n(name(5)); # 刪除索引mysql> alter table city drop index idx_n;

關于索引的相關問題

1 回表問題

# 關于輔助索引回表是什么?回表會帶來什么問題?怎么減少回表?a. 回表:按照輔助索引列作為查詢條件時,先查找輔助索引樹,再到聚簇索引樹查找數據行的過程。b. 影響:IO量多、IO次數多、隨機IO會增多c. 減少回表:  1. 輔助索引能夠完全覆蓋查詢結果,可以使用聯合索引。  2. 盡量讓查詢條件精細化,盡量使用唯一值多的列作為查詢條件  3. 優化器:MRR(Multi-Range-Read), 錦上添花的功能。         mysql> select @@optimizer_switch;         mysql> set global optimizer_switch='mrr=on';功能:(1)輔助索引查找后得到ID值,進行自動排序(2)一次性回表,很有可能受到B+TREE中的雙向指針的優化查找。

2 索引樹高度的影響因素

a. 高度越低越好b. 數據行越多,高度越高。   1. 分區表。一個實例里管理。基本不再使用了!   2. 按照數據特點,進行歸檔表。   3. 分布式架構。針對海量數據、高并發業務主流方案。   4. 在設計方面,滿足三大范式。c. 主鍵規劃:長度過長。   1. 主鍵,盡量使用自增數字列。   d. 列值長度越長,數據量大的話,會影響到高度。   1. 使用前綴索引   比如列值長100字符,那么只取前10個字符,構建索引樹。 e. 數據類型的選擇。   選擇合適的、簡短的數據類性。   例如:   1. 存儲人的年齡  ,使用 tinyint 和 char(3)哪個好一些   2. 存儲人名,char(20)和varchar(20)的選擇哪一個好。      a. 站在數據插入性能角度思考,應該選:char          b. 從節省空間角度思考,應該選:varchar      c. 從索引樹高度的角度思考,應該選:varchar結論:建議使用varchar類型存儲變長列值

創建索引

查詢表索引

mysql> desc city;+-------------+----------+------+-----+---------+----------------+| Field       | Type     | Null | Key | Default | Extra          |+-------------+----------+------+-----+---------+----------------+| ID          | int(11)  | NO   | PRI | NULL    | auto_increment || Name        | char(35) | NO   | MUL |         |                || CountryCode | char(3)  | NO   | UK |         |                || District    | char(20) | NO   |     |         |                || Population  | int(11)  | NO   |     | 0       |                |+-------------+----------+------+-----+---------+----------------+5 rows in set (0.00 sec) PK     --> 主鍵(聚簇索引)     MUL    --> 輔助索引   UK     --> 唯一索引  mysql> show index from city;+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| city  |          0 | PRIMARY     |            1 | ID          | A         |        4188 |     NULL | NULL   |      | BTREE      |         |               || city  |          1 | CountryCode |            1 | CountryCode | A         |         232 |     NULL | NULL   |      | BTREE      |         |               || city  |          1 | idx_name    |            1 | Name        | A         |        3554 |        5 | NULL   |      | BTREE      |         |               |+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ # Cardinality值越大,索引優先級越高。

創建索引

# 單列輔助索引 select * from test.t100w where k2='780P'; # 該表沒有索引,大量數據查詢耗時極大,需要優化! 優化方式:語法:alter table 表名 add index 索引名(列名);  alter table t100w add index idx_k2(k2); # 聯合索引創建 mysql> alter table t100w add index idx_k1_num(k1,num); # 前綴索引創建# 判斷前綴長度多少合適:select count(distinct(left(name,5)))  from city ;select count(distinct name)  from city ;# 創建前綴索引mysql> alter table city add index idx_n(name(5)); # 刪除索引alter table city drop index idx_n;

執行計劃獲取和分析

1 執行計劃工具

# 獲取語句的執行計劃工具  explain   des# 使用方法 :mysql> desc select * from city where countrycode='CHN';mysql> explain  select * from city where countrycode='CHN';+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | city  | NULL       | ref  | CountryCode   | CountryCode | 3       | const |  363 |   100.00 | NULL  |+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+

2 執行計劃信息

table         :此次查詢訪問的表type          :索引查詢的類型(ALL、index、range、ref、eq_ref、const(system)、NULL)possible_keys :可能會應用的索引key           : 最終選擇的索引key_len       :索引覆蓋長度,主要是用來判斷聯合索引應用長度。rows          :需要掃描的行數Extra         :額外信息

3 Type信息詳解

代價從高到低!

  • ALL

# 沒有使用到索引a. 查詢條件沒建立索引# district并沒有被創建成輔助索引mysql> desc select * from city where district='shandong';+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+|  1 | SIMPLE      | city  | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 4188 |    10.00 | Using where |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec) b. 有索引不走# 這三種查詢不走索引mysql> desc select * from city where countrycode!='CHN';mysql> desc select * from city where countrycode not in ('CHN','USA');mysql> desc select * from city where countrycode like '%CH%';
  • index

# 全索引掃描 mysql> desc city;+-------------+----------+------+-----+---------+----------------+| Field       | Type     | Null | Key | Default | Extra          |+-------------+----------+------+-----+---------+----------------+| ID          | int(11)  | NO   | PRI | NULL    | auto_increment || Name        | char(35) | NO   | MUL |         |                || CountryCode | char(3)  | NO   | MUL |         |                || District    | char(20) | NO   |     |         |                || Population  | int(11)  | NO   |     | 0       |                |+-------------+----------+------+-----+---------+----------------+5 rows in set (0.00 sec) mysql> desc select countrycode from city;+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key         | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+|  1 | SIMPLE      | city  | NULL       | index | NULL          | CountryCode | 3       | NULL | 4188 |   100.00 | Using index |+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec) # 由于country是輔助索引,這里查詢會遍歷掃描索引,效率也是一種問題。
  • range

從這里開始,我們可以接受這些類型的索引查詢,但是無法容忍上述兩種!

# 索引范圍掃描# 會受到:B+TREE額外優化,葉子節點雙向指針# >、=、<=、in、or、between and、likemysql> desc select * from city where id<10;mysql> desc select * from city where countrycode like 'CH%';+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+| id | select_type | table | partitions | type  | possible_keys | key         | key_len | ref  | rows | filtered | Extra                 |+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+|  1 | SIMPLE      | city  | NULL       | range | CountryCode   | CountryCode | 3       | NULL |  397 |   100.00 | Using index condition |+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-----------------------+1 row in set, 1 warning (0.00 sec) # 這種情況下,主鍵索引性能還可以,如果查詢條件是輔助索引,就會牽扯到回表次數問題而導致性能較低。 # 以下兩種查詢,大幾率受不到葉子節點雙向指針優化。# 他會遍歷兩個值之間的數據,而這種遍歷是沒有必要的!mysql> desc select * from city where countrycode in ('CHN','USA');mysql> desc select * from city where countrycode='CHN' or countrycode='USA'; # 建議:如果查詢列重復值少的話,我們建議改寫為 union all (2-3個,如果超過50%,那就沒什么卵用了!)desc select * from city where countrycode='CHN'union allselect * from city where countrycode='USA';+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | PRIMARY     | city  | NULL       | ref  | CountryCode   | CountryCode | 3       | const |  363 |   100.00 | NULL  ||  2 | UNION       | city  | NULL       | ref  | CountryCode   | CountryCode | 3       | const |  274 |   100.00 | NULL  |+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+2 rows in set, 1 warning (0.00 sec)
  • ref

# 輔助索引等值查詢desc select * from city where countrycode='CHN';+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key         | key_len | ref   | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+|  1 | SIMPLE      | city  | NULL       | ref  | CountryCode   | CountryCode | 3       | const |  363 |   100.00 | NULL  |+----+-------------+-------+------------+------+---------------+-------------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec) #?等值查詢的代價比range就要低很多了。

?

  • eq_ref

# 多表連接查詢中,非驅動表的連接條件是主鍵或唯一鍵時。mysql> desc select city.name,country.name from city left join country on city.countrycode=country.code where city.population<100;# 在非驅動表country中code是主鍵,在多表連接中如果顯示未eq_ref,那就是最佳的優化實踐,也是性能最好的一種場景。這也是多表連接中非驅動表的優化方向。驅動表后續會介紹。+----+-------------+---------+------------+--------+---------------+---------+---------+------------------------+------+----------+-------------+| id | select_type | table   | partitions | type   | possible_keys | key     | key_len | ref                    | rows | filtered | Extra       |+----+-------------+---------+------------+--------+---------------+---------+---------+------------------------+------+----------+-------------+|  1 | SIMPLE      | city    | NULL       | ALL    | NULL          | NULL    | NULL    | NULL                   | 4188 |    33.33 | Using where ||  1 | SIMPLE      | country | NULL       | eq_ref | PRIMARY       | PRIMARY | 3       | world.city.CountryCode |    1 |   100.00 | NULL        |+----+-------------+---------+------------+--------+---------------+---------+---------+------------------------+------+----------+-------------+2 rows in set, 1 warning (0.00 sec) # 這個時候我們把population條件創建為一個輔助索引,驅動表走的索引就是range。這也是最好的一種優化了,沒有別的方式比這個性能更好了,知足吧!mysql> alter table city add index idx_p(population);mysql> desc select city.name,country.name  from city  left join country  on city.countrycode=country.code where city.population<100;+----+-------------+---------+------------+--------+---------------+---------+---------+------------------------+------+----------+-----------------------+| id | select_type | table   | partitions | type   | possible_keys | key     | key_len | ref                    | rows | filtered | Extra                 |+----+-------------+---------+------------+--------+---------------+---------+---------+------------------------+------+----------+-----------------------+|  1 | SIMPLE      | city    | NULL       | range  | idx_p         | idx_p   | 4       | NULL                   |    1 |   100.00 | Using index condition ||  1 | SIMPLE      | country | NULL       | eq_ref | PRIMARY       | PRIMARY | 3       | world.city.CountryCode |    1 |   100.00 | NULL                  |+----+-------------+---------+------------+--------+---------------+---------+---------+------------------------+------+----------+-----------------------+2 rows in set, 1 warning (0.00 sec)
  • const(system)

# 主鍵或唯一鍵等值查詢# 性能最好,只需回表一次,這是一種奢望!mysql> desc select * from city where id=1;+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+|  1 | SIMPLE      | city  | NULL       | const | PRIMARY       | PRIMARY | 4       | const |    1 |   100.00 | NULL  |+----+-------------+-------+------------+-------+---------------+---------+---------+-------+------+----------+-------+1 row in set, 1 warning (0.00 sec)
  • NULL

# 查不到數據的時候性能最好!那我要你有何用!!!不用管了!!!mysql> desc select * from city where id=1000000000000000;

總結

通常最常見的執行計劃類型是:range、ref、eq_ref。如果出現index或者all的情況,那就可能涉及到改寫sql查詢語句,或者得找業務溝通查詢條件了。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538487.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538487.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538487.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2010年寒假學習心得

本人的博客園博客&#xff1a;http://www.cnblogs.com/zengmiaogen 博客園是我早期發表的博文。 ------------------------------------------ 1、心態要好&#xff0c;要相信自己能完成&#xff0c;不要擔心自己完成不了&#xff0c;萬事開頭難&#xff0c;有挫折是正常的。…

利用5w1h寫出高效的git commit

創建git commit 模板 創建模板 在個人目錄下&#xff0c; 創建 .gitmessage vi .gitmessage 復制代碼并輸入以下信息 Who: Demand maker*When: versions affected*What:The content of the code changes* descrption: * wiki/task:Why:The reason*How:Influence of change* 復制…

python高維數據_t-SNE高維數據可視化(python)

t-SNE實踐——sklearn教程t-SNE是一種集降維與可視化于一體的技術&#xff0c;它是基于SNE可視化的改進&#xff0c;解決了SNE在可視化后樣本分布擁擠、邊界不明顯的特點&#xff0c;是目前最好的降維可視化手段。關于t-SNE的歷史和原理詳見從SNE到t-SNE再到LargeVis。代碼見下…

java數學計算表達式_Java初學者:內建函數計算簡單的數學表達式

這個應該在之前寫的&#xff0c;忘記了&#xff0c;補上這次我們說一下如何用java計算數學表達式的值&#xff0c;比如&#xff0c;我們要計算sin(pi/3) cos(pi/6) 5.6^3&#xff0c;怎么計算呢&#xff1f;這里我們需要用到java的math的內建函數&#xff0c;所謂內建函數&am…

你是怎樣的程序員?

一、程序員A 一個善于總結、能舉一反三&#xff0c;敢于承擔責任&#xff0c;敢于挑戰自我&#xff0c;擁抱新技術的程序員&#xff0c;他的年齡意味著豐富經驗&#xff0c;意味著效率。 他能指出并帶人繞過一個一個技術大坑&#xff0c;笑看風云而不掉進去&#xff1b; 他能指…

谷歌新作gVisor:VM容器融合技術已經到來

作者&#xff5c;秦承剛&#xff0c;吳啟翾&#xff0c;喻望&#xff0c;楊偉 編輯&#xff5c;張嬋 出處丨高效開發運維 5 月 2 日&#xff0c;谷歌發布了一款新型的沙箱容器運行時 gVisor&#xff0c;號稱能夠為容器提供更安全的隔離&#xff0c;同時比 VM 更輕量。容器基于共…

安卓androidstudio訪問本地接口_安卓開發之數據存儲在本地的四種方式

?安卓開發之數據存儲在本地的四種方式本地數據存儲&#xff0c;在安卓開發過程中是不可避免的一個話題。這些本地的數據可能是用戶的設置&#xff0c;程序的設置&#xff0c;用戶的數據圖片, 也可能是網絡傳輸的一些緩沖數據。基本上我們有4種方法可以存儲安卓程序的數據。第1…

java vector 線程安全_關于Vector到底是不是 線程安全的 問題

線程安全&#xff0c;在java的多并發編程中是重要概念&#xff0c;意思是&#xff0c;多個線程同時操作一個對象&#xff0c;在各種不同情況下&#xff0c;都不會造成不同的后果。一個經典問題&#xff0c;Vector到底是不是線程安全的&#xff1f;很多人都會回答&#xff0c;是…

TypeScript 2 : 獲取當前日期及前后范圍日期【Array】

原文鏈接&#xff1a;http://blog.csdn.net/crper/article/details/55194334 --------------------------------------------------- 前言 今天有個接口字段需求&#xff0c;要寫一個今天及前幾天的日期傳過去&#xff1b; 在網上找了下都木有什么比較好的方案&#xff1b;就…

C# Winform使用Windows Media Player播放多媒體整理

一、簡單使用示例步驟 1.添加Windows Media Player 組件當前是系統的 Com組件 工具箱》右鍵“選擇項”》選擇Com組件 2.控件拖拽到桌面&#xff0c;使用 private void button1_Click(object sender, EventArgs e) {//播放開始聲音axWindowsMediaPlayer2.URL "start.mp3&q…

快學Scala習題解答—第一章 基礎

原文鏈接&#xff1a;http://blog.csdn.net/ivan_pig/article/details/8249768 --------------------------------------------------------- 1 簡介 近期對Scala比較感興趣&#xff0c;買了本《快學scala》,感覺不錯。比《Programming Scala:Tackle Multi-Core Complexity on…

java swing rectangle_Java SwingUtilities.convertRectangle方法代碼示例

本文整理匯總了Java中javax.swing.SwingUtilities.convertRectangle方法的典型用法代碼示例。如果您正苦於以下問題&#xff1a;Java SwingUtilities.convertRectangle方法的具體用法&#xff1f;Java SwingUtilities.convertRectangle怎麼用&#xff1f;Java SwingUtilities.c…

python 查詢包_查找Python包的依賴包(語句)

Window 10家庭中文版&#xff0c;Python 3.6.4&#xff0c;今天看完了urllib3的官文(官方文檔)&#xff0c;因為沒有具體使用過&#xff0c;所以&#xff0c;仍然是一知半解&#xff0c;但是&#xff0c;突然想知道 urllib3以及前面學習過的requests模塊都依賴了什么其它模塊。…

618選購手機正當時,好評率高達99%的手機了解一下!

一年一度的京東618年中購物狂歡節如火如荼的進行中&#xff0c;手機廠商們都使出了渾身解數&#xff0c;對消費者進行爭奪。對于用戶來說&#xff0c;618絕對是更換手機的好時機。不過&#xff0c;小伙伴們面對市場上的眾多機型&#xff0c;也有可能挑花了眼&#xff0c;不知道…

IntelliJ IDEA 2017.2 x64 安裝Scala

從官網下載好IntelliJ IDEA 和scala IntelliJ IDEA 安裝scala插件 新建scala項目 建好后&#xff0c;發現src右鍵--新建---沒有 .scala選項 解決方法

Django-ORM數據庫操作

背景 Django框架功能齊全自帶數據庫操作功能&#xff0c;由于工作中設計巨量的api接口&#xff0c;需要一個很好的web后端服務框架&#xff0c;Django給了莫大的幫助。本文主要介紹Django的ORM框架我們一般對數據庫的使用的認識是&#xff1a; 創建數據庫&#xff0c;設計表結構…

python查詢缺失值所在位置_Python Pandas找到缺失值的位置方法

問題描述&#xff1a;python pandas判斷缺失值一般采用 isnull()&#xff0c;然而生成的卻是所有數據的true&#xff0f;false矩陣&#xff0c;對于龐大的數據dataframe&#xff0c;很難一眼看出來哪個數據缺失&#xff0c;一共有多少個缺失數據&#xff0c;缺失數據的位置。首…

快學Scala習題解答—第二章 控制結構和函數

原文地址&#xff1a;http://blog.csdn.net/ivan_pig/article/details/8253068 ---------------------------------------------------------------------------------- 3 控制結構和函數 3.1 一個數字如果為正數&#xff0c;則它的signum為1;如果是負數,則signum為-1;如果為0…

java barrier_Java - Latch和Barrier的區別

之所以把Latch與Barrier放在一起比較是因為他們給人一種相似的感覺。他們都是阻塞一些行為直至某個事件發生&#xff0c;但Latch是等待某個事件發生&#xff0c;而Barrier是等待線程。先比較一下JCIP中對二者的描述&#xff1a;LatchA latch is a synchronizer that can delay …

Kingback小組沖刺博客

一、6月13日 1、今日完成的任務 李可欣 項目首頁的框架設計 項目首頁的導航欄部分 對于項目的配色進行了改進&#xff0c;并且設計了logo 楊帆 今天進行了數據庫的設計&#xff0c;完成了數據庫的增刪改查&#xff0c;并建立了兩個jsp頁面&#xff0c;還學習了一些數據庫設計的…