程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysql手記

編輯:MySQL綜合教程

myisam innoDB是mysql常用的存儲引擎

MyISAM不支持事務、也不支持外鍵,但其訪問速度快,對事務完整性沒有要求。

InnoDB存儲引擎提供了具有提交、回滾和崩潰恢復能力的事務安全。但是比起MyISAM存儲引擎,InnoDB寫的處理效率差一些並且會占用更多的磁盤空間以保留數據和索引。

innodb的索引有兩種,叫第一索引,以及第二索引。有的也叫聚集索引與輔助索引。其中聚集索引存放了表中的記錄,查詢的時候不需要回表掃描,同時索引項較大;輔助索引存放的位置信息,需要回表掃描,相對來說,I/0 次數會增加。

查詢的時候最好能夠從索引中取得數據,減少回表,相對來說離散的 I/0,

MYISAM 沒有聚集索引。存放的記錄的物理位置

OLTP (聯機事務處理)故名思議主要強調事務,如(銀行存款的修改,用戶訂單等)面向應用

OLAP (聯機分析處理) 主要作為數據倉庫,面向決策,分析等。

聯接算法:

nested-loops join 主要思想是:從外表中拿出一個數據與內表的每一條數據比較,O(M*N) 。當有索引時:內表只需要比較索引的高度,近似於O(M*H)

Block nested--loops join 主要思想 是:改進 nested-loops join 外部表每次去一定的數據到緩沖區,比如10條,然後這10條記錄在跟內部表的數據比較,減少內部表的掃描次數。

Hash join 只能== 以及!=,不能部分比較(為何?,hash是對整個字符串hash) 主要思想是:將外部表的數據放到join buffer,然後hash,這一階段

為build;probe階段,從內表中取出數據hash,比較。

基本的測試:

create TABLE myorder
( id int not null auto_increment,
userid int not null ,
orderdate date,
comein int DEFAULT 0,
comeout int DEFAULT 0,
PRIMARY key (id)
);

INSERT into myorder VALUES("","11123940","2014-05-10","","50");


SELECT userid ,orderdate ,comein -comeout as rest
from myorder
GROUP BY userid ,orderdate;


create index myorderindex on myorder(id,userid);


explain SELECT userid ,orderdate ,comein -comeout as rest
from myorder
GROUP BY userid ,orderdate;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved