索引,sql收尾

1.索引原理

磁盤預讀:4096字節
b樹:balance tree
b+樹:數據只存儲在葉子節點;在子節點之間加入了雙向地址鏈接,更方便地在子節點之間進行數據的讀取
索引原理
innodb:
    彙集索引:對主鍵建立索引,並將該行全部數據存到樹形結構裏
    輔助索引:除了主鍵以外全部的索引都是輔助索引
    回表:只查詢一個索引並不能解決查詢中的問題,還須要到具體的表         中去獲取整行數據
myisam:只有輔助索引
索引種類:
primary key  非空 + 惟一 + 彙集索引
unique   惟一 + 輔助索引
index    普通索引(輔助索引)
建立索引:create index index_name on 表(字段);  # 建立索引後查詢效率大幅提升,文件所佔硬盤資源大幅提升
刪除索引:drop index index_name on 表;
索引優缺點:
    優:查找速度快
    缺:浪費空間,拖慢寫的速度    #不要在程序中建立無用的索引

2.正確使用索引

1.所查詢的列不是建立了索引的列
2.在條件中不能帶運算或者函數,必須是「字段 = 值」
3.若是建立索引的列的內容重複率高也不能有效利用索引   # 重複率不超過10%的列比較適合作索引
4.數據對應的範圍若是太大的話,也不能有效利用索引   # between and  > < >= <= !=  not in
5.like若是把%放在最前面也不能命中索引
6.多條件狀況
    and:只要一個條件列是索引列就能夠命中索引
    or:只有全部條件列都是索引才能命中索引
7.聯合索引:在多個條件相連的狀況下,使用聯合索引的效率要高於使用單字段的索引
create index index_mix on 表(字段a,字段b);
    1.建立索引的順序a,b條件中從哪個字段開始出現了範圍,索引就失效
    2.聯合索引在使用的時候遵循最左前綴原則
    3.聯合索引中只有使用and能生效,使用or失效

3.mysql收尾

explain:查看sql語句的執行計劃
explain select * from 表 where 條件;  # 查看是否命中了索引,命中的索引的類型
覆蓋索引: explain出來的是using index;不用回表
索引合併: explain出來的是 using union;建立索引的時候分開建立的,用的時候(or的多條件狀況下)合一塊兒了

mysql開啓慢日誌:經過配置文件開啓,篩選出程序中耗時長的sql語句
七表查詢速度慢怎麼辦?
1.表結構:儘可能用固定長度的數據類型代替可變長數據類型;把固定長度的字段放在前面
2.數據的角度:若是表中的數據越多,查詢效率越慢
              列多:垂直分表     行多:水平分表
3.sql的角度:
    儘可能把條件寫細緻,where條件多作篩選
    多表狀況下儘可能連表代替子查詢
    建立有效的索引,規避無效索引
4.配置角度:開啓慢日誌,確認有問題的sql語句
5.數據庫:讀寫分離(解決數據庫讀的瓶頸)

數據庫的導入導出
備份表:
    mysqldump -uroot -p123 數據庫 > 地址  # 整個庫的表和數據
    mysqldump -uroot -p123 庫名 表名 表名 > 地址 # 單表(多表)的數據
備份庫:
    mysqldump -uroot -p123 --databases 庫名 庫名 > 地址 # 多庫
恢復數據:
    進入mysql切換到要恢復數據的庫下面
    sourse 以前備份的地址

開啓事務,給數據加鎖(行級鎖)
begin;
select 字段 from 表 where 條件 for update;
update 表名 set 字段 = 值 where 條件;
commit;

4.sql注入

import pymysql

conn = pymysql.connect(host='127.0.0.1', user='root', password="123",database='day42')
cur = conn.cursor()
user = "kunkun' or 1=1 ;-- "   # 因'--'註釋的特性,致使此種寫法造成sql注入
password = '*******'
sql = "select * from userinfo where username = %s and password =%s;"
cur.execute(sql,(user,password))
ret = cur.fetchone()
print(ret)
cur.close()
conn.close()
相關文章
相關標籤/搜索