《Mysql實例深入淺出的學習Mysql》要點:
本文介紹了Mysql實例深入淺出的學習Mysql,希望對您有用。如果有疑問,可以聯系我們。
MYSQL教程前言
MYSQL教程數據庫一直是筆者比較薄弱的地方,結合自己的使用經驗(python+sqlalchemy)等做個記錄,筆者比較喜歡使用ORM,一直感覺拼sql是一件比較痛苦的事情(主要是不擅長sql),以前維護項的目中也遇到過一些數據庫的坑,比如編碼問題,浮點數精度損失等,防止以后重復踩坑.
MYSQL教程1章:使用幫助
MYSQL教程使用mysql內置的幫助命令
msyql> ? data types
: 查看數據類型mysql> ? int
mysql> ? create table
MYSQL教程2章:表類型(存儲引擎)的選擇
MYSQL教程最常用的兩種引擎:
MYSQL教程1、Myisam是Mysql的默認存儲引擎,當create創建新表時,未指定新表的存儲引擎時,默認使用Myisam. 每個MyISAM 在磁盤上存儲成三個文件.文件名都和表名相同,擴展名分別是 .frm (存儲表定義) 、.MYD (MYData,存儲數據)、.MYI (MYIndex,存儲索引).數據文件和 索引文件可以放置在不同的目錄,平均分布io,獲得更快的速度.
MYSQL教程2、InnoDB 存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全.但是對比 Myisam 的存儲引擎,InnoDB 寫的處理效率差一些并且會占用更多的磁盤空間以保留數據和索引.
MYSQL教程常用環境:
MYSQL教程1、MyISAM: 默認的 MySQL 插件式存儲引擎, 它是在 Web、 數據倉儲和其他應用環境下最常
使用的存儲引擎之一
MYSQL教程2、InnoDB:用于事務處理應用程序,具有眾多特性,包括 ACID 事務支持.
MYSQL教程3章:選擇合適的數據類型
MYSQL教程首先選擇合適的存儲引擎,根據指定的存儲引擎確定合適的數據類型.
MYSQL教程需要注意的一些數據類型:
MYSQL教程1、char與varchar: 保存和檢索方式不同,最大長度和是否尾部空格被保留也不同.char固定長度,長度不夠用空格填充,獲取時如果沒有設置 PAD_CHAR_TO_FULL_LENGTH默認去除尾部空格.
varchar變長字符串,檢索時尾部空格會被保留.注意查詢時候不區分大小寫,如果用sqlalchemy區分大小寫不要用func.binary
函數.
MYSQL教程2、text和blob: text
和blob執行大量的更新或者刪除的時候會留下很大『空洞』,建議定期用OPTIMIZE TABLE功能對這類表碎片整理.避免檢索大型的blob或text值 .把text和blob列分離到單獨的表中.
MYSQL教程3、浮點數float與定點數decimal:
MYSQL教程注意幾個點:
MYSQL教程????? 1.浮點數雖然能表示更大的數據范圍,但是有誤差問題.
MYSQL教程????? 2.對貨幣等精度敏感的問題,應使用定點數存儲.之前項目踩過坑,結果不得不用放大和縮小倍數的方法解決,比較ugly.
MYSQL教程????? 3.編程如果遇到浮點數,注意誤差問題,盡量避免浮點數比較(比較浮點數需要作差小于一個特定精度),python3.5中可以這么比較:float_eq = partial(math.isclose, rel_tol=1e-09, abs_tol=0.0)
MYSQL教程????? 4.注意浮點數中一些特殊值的處理.
MYSQL教程4章:字符集
MYSQL教程一開始要選擇合適的字符集,否則后期更換代價很高.python2中字符集就是個老大難問題,困然很多新手.之前維護過的項目使用了msyql默認的latin1字符集,導致每次寫入的時候都要對字符串手動encode成utf8.最近用python3.5+flask做項目直接使用utf8,再也沒碰到過編碼問題:
MYSQL教程5章:索引的設計和使用
MYSQL教程所有mysql列類型都可以被索引,對相關列使用索引是提高select操作性能的最佳途徑.索引設計的原則:
MYSQL教程????? 1.搜索的索引列,不一定是所要選擇的列.最適合的索引的列是出現在where子句中的列,或連接子句中指定的列,而不是出現在select關鍵字之后的選擇列表中的列.
MYSQL教程????? 2.使用唯一索引.對于唯一值的列,索引效果較好,而有多個重復值的列,索引效果差.
MYSQL教程????? 3.使用短索引.如果對字符串列進行索引,應指定一個前綴長度,只要有可能就應該這樣做.
MYSQL教程????? 4.利用最左前綴.在創建一個n列索引時,實際上創建了mysql可利用的n個索引.多列索引可以起到幾個索引的作用,因為可利用索引中的最左邊的列集來匹配行,這樣的列集成為最左前綴.
MYSQL教程????? 5.不要過度索引.索引會浪費磁盤空間,降低寫入性能.
MYSQL教程????? 6.考慮在列上進行的比較類型.
MYSQL教程6章:鎖機制和事務控制
MYSQL教程InnoDB引擎提提供行級鎖,支持共享鎖和排他鎖兩種鎖定模式,以及四種不同的隔離級別.mysql通過AUTOCOMIT, START TRANSACTIONS, COMMIT和ROLLBACK等語句支持本地事務.
MYSQL教程7章:SQL中的安全問題
MYSQL教程SQL注入:利用某些數據庫的外部接口把用戶數據插入到實際的數據庫操作語音(sql)中,從而達到入侵數據庫甚至操作系統的目的.產生原因主要是因為程序堆用戶輸入的數據沒有進行嚴格的過濾,導致非法數據庫查詢語句的執行,防范措施:
prepareStatement = Bind-variable
,不要使用拼接的sqlMYSQL教程8章:SQL Mode及相關問題
MYSQL教程更改默認的mysql執行模式,比如嚴格模式下列的插入或者更新不正確時mysql會給出錯誤,并放棄操作.set session sql_mode='STRICT_TRANS_TABLES'
.設置sql_mode需要應用人員權衡各種得失,做一個合適的選擇.
MYSQL教程9章:常用SQL技巧
MAX([DISTINCE] expr), MIN([DISTINCE] expr)
rand()/rand(n)
提取隨機行group by
和with rollup
子句做統計bit group functions
做統計MYSQL教程10章:其他需要注意的問題
MYSQL教程數據庫名、表名大小寫問題:不同平臺和系統,是否區分大小寫是不同的.建議就是始終統一使用小寫名.
使用外鍵需要注意的地方:mysql中InnoDB支持對外部關鍵字約束條件的檢查.
MYSQL教程11章:SQL優化
MYSQL教程優化SQL的一般步驟:
MYSQL教程????? 1.使用show status和應用特點了解各種SQL的執行頻率,了解各種SQL大致的執行比例.比如InnoDB的的參數Innode_rows_read查詢返回的行數,Innodb_rows_inserted執行insert插入的行數,Innodb_rows_updated更新的行數.還有一下幾個參數:Connections試圖連接mysql服務器嗯出書,Uptime服務器的工作時間,Slow_queries慢查詢的次數.
MYSQL教程????? 2.定位執行效率低的SQL語句.兩種方式:一種是通過慢查詢日志定位執行效率低的語句,使用―log-slow-queries[=file_name]選項啟動時,mysqld寫一個包含所有執行時間超過long_query_time秒的SQL語句的日志文件.另一種是show processlist查看當前mysql在進行的線程,包括線程的狀態,所否鎖表等,可以實時查看SQL執行情況,同時對一些鎖表操作進行優化.
MYSQL教程????? 3.通過EXPLAIN分析低效SQL的執行計劃:explain可以知道什么時候必須為表假如索引以得到一個使用索引來尋找記錄的更快的SELECT,以下是EXPLAIN執行后得到的結果說明:
MYSQL教程????? 4.確定問題,并采取相應優化措施.
MYSQL教程索引問題
show status like 'Handler_read%';
MYSQL教程兩個簡單實用的優化方法
MYSQL教程從客戶端(代碼端)角度優化
MYSQL教程12章: 優化數據庫對象
MYSQL教程優化表的數據類型:PROCEDURE ANALYZE()
對當前表類型的判斷提出優化建議.實際可以通過統計信息結合應用實際優化.
MYSQL教程通過拆分,提高表的訪問效率:這里拆分主要是針對Myisam類型的表.
MYSQL教程逆規范化:規范化設計強調獨立性,數據盡可能少冗余,更多冗余意味著占用更多物理空間,同事也對數據維護和一致性檢查帶來問題.適當冗余可以減少多表訪問,查詢效率明顯提高,這種情況可以考慮適當通過冗余提高效率.
MYSQL教程使用冗余統計表:使用create temporary table
做統計分析
MYSQL教程選擇更合適的表類型:1.如果應用出現比較嚴重的鎖沖突,請考慮是否刻意更改存儲引擎到InnoDB,行鎖機制可以有效減少鎖沖突出現.2.如果應用查詢操作很多,且對事務完整性要求不嚴格,可以考慮使用Myisam.
MYSQL教程13章:鎖問題
MYSQL教程獲取鎖的等待情況:table_locks_waited和table_locks_immediate狀態變量來分析系統上的表鎖定爭奪.檢查Innode_row_lock分析行鎖的爭奪情況.
MYSQL教程14章:優化Mysql Server
MYSQL教程查看Mysql Server當前參數
mysqld --verbose --help
shell> mysqladmin variables or mysql> SHOW VARIABLES
mysqladmin extended-status or mysql>SHOW STATUS
MYSQL教程影響Mysql性能的重要參數
MYSQL教程15章:I/O問題
MYSQL教程磁盤搜索是巨大的性能瓶頸.
MYSQL教程16章:應用優化
MYSQL教程總結
MYSQL教程以上就是關于mysql的相關內容,希望本文的內容對大家學習或者使用mysql能帶來一定的幫助,如果有疑問大家可以留言交流.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/3539.html