1.MySQL數據庫 - 引擎: - innodb - 支持事務 - 鎖 - 行鎖 - 表鎖 - 示例: - 終端: begin; 加鎖 select xx from xx for update; commit; 提交 - pymysql cursor.execute('select * from xx for update') - django with trancation.automic(): models.User.objects.all().for_update() - mysaim - 不支持事務 - 鎖 - 表鎖 - 查詢快 2.數據庫受權 grant all\select\insert\update\delete|權限 on tables|表名字 to users\public|用戶名\\ with grant option|可繼承 GRANT <權限>[,<權限>]...[ON <對象類型> <對象名>]TO <用戶>[,<用戶>]...[WITH GRANT OPTION]; 3.瞭解:https://www.cnblogs.com/wupeiqi/articles/5713323.html - 視圖 (虛擬表) - 存儲過程 (儲存語句放在數據庫,下次用直接調用) - 觸發器 (自動觸發日誌,寫下記錄) - 函數 (數據庫函數) select max(id) from tb group by xid; 4.索引 索引做用:加速查找+約束。 索引種類: - 主鍵索引:加速查找、不重複、非空 - 惟一索引:加速查找、不重複、只能有一個能夠爲空 - 普通索引:加速查找 - 聯合索引:加速查找 - 聯合惟一索引:加速查找、不重複 PS:聯合索引遵循最左前綴原則。 id name pwd email 命中索引 select * from tb where name='x' select * from tb where name='x' and pwd='123' select * from tb where name='x' and pwd='123' and email='xs' 沒法命中索引 - like - 函數 - > - != - group by - or 名詞: - 覆蓋索引:在索引文件中就能夠把想要的數據獲得,不須要再去物理表中查詢 - 視圖,虛擬表。放在數據庫 - 觸發器,在對某張表進行:增、刪、改的先後自定義操做。 - 函數,對數據中的值進行操做。 - 索引合併:使用多個單列索引去查找數據。 https://www.cnblogs.com/wupeiqi/articles/5716963.html 5.索引實現原理 - B+ tree 指數增加(使用最多) - hash 較少使用 6.優化方案: - 不使用select * - 短索引 - 使用鏈表(join)代替子查詢 - 固定長度在前面 - 分庫分表 - 水平分表 - 垂直分表 - 組合索引 > 索引合併 - 內存代替鏈表 - Djnago裏面ORM字段(choices) - 查詢一條數據時用limit - 讀寫分離(主從) - 分頁 - 緩存(熱點數據放redis) 注意:char 佔用固定長度字節 varchar 佔用自己大小字節 - 對於不肯定的sql語句先執行 -- explain select * from tb; - 查詢時的訪問方式,性能:all < index < range < index_merge < ref_or_null < ref < eq_ref < system/const 7.何時須要加鎖? - 計數 - 應用場景: - 商品數量 8.慢日誌? - 查詢時間久 - 未命中索引 修改配置: slow_query_log = ON/OFF 是否開啓慢日誌記錄 long_query_time = 2 時間限制,超過此時間,則記錄 slow_query_log_file = /usr/slow.log 日誌文件 log_queries_not_using_indexes = ON/OFF 爲使用索引的搜索是否記錄
https://blog.csdn.net/jy0902/article/details/19248299 安裝redis報錯 http://www.cnblogs.com/wupeiqi 1. redis是什麼? (作內存管理) - 配置文件:bind 0.0.0.0 port:6379 require:密碼 - 是否能夠持久化?AOF(快照)、RDB(記錄歷史記錄) - 單進程、單線程 - 5大數據類型(字符串,哈希/散列/字典,列表,集合,有序集合) 2.使用鏈接池 -本質,維護一個已經和服務端連接成功的socket(列表) -之後再次發送數據時,直接獲取一個socket,直接send數據 3.若是redis的key對應的字典中有1000w條數據,請打印全部數據 -hgetall("key") 獲取全部數據服務器內存沒法承受,爆棧 -hget("key", "v1") 重複操做多,頻繁 -hscan_iter("key", count=100) 設置獲取數據條目,可行操做 4.redis操做時,只有第一層value支持:list,dict.... 5.Django應用: -自定義使用redis -使用第三方組件 -全棧緩存 -單視圖 -局部頁面 補充:rest framework框架訪問頻率限制推薦放到 redis/memecached