- MYISAM 引擎和INNODB引擎 各自的適用業(yè)務(wù)場景都有那些:
- MYISAM不支持事務(wù)扫俺,所以它適用的場景集中在檢索領(lǐng)域
- MyISAM可被壓縮,存儲空間較小 InnoDB的表需要更多的內(nèi)存和存儲欢峰,它會在主內(nèi)存中建立其專用的緩沖池用于高速緩沖數(shù)據(jù)和索引
- MYISAM不支持事務(wù)堪侯,InnoDB支持
- MYISAM鎖的級別為表鎖,InnoDB是行級別的鎖,InnoDB通過一個聚合索引對行數(shù)據(jù)進行加鎖瓤逼,行級鎖通聚合索引對數(shù)據(jù)行進行鎖定踢关,聚合索引一般是建立在主鍵上的伞鲫,所以可以保證數(shù)據(jù)唯一性
- count without where 時,也就是對表進行統(tǒng)計時签舞,MYISAM的性能更優(yōu)秕脓,因為MYISAM將信息保存到了表中,而InnoDB需要進行全表的掃描
綜上儒搭,我個人的總結(jié): 在進行讀寫分離時吠架,可以將讀的庫的存儲引擎設(shè)置為MYISAM,將寫的庫設(shè)置為InnoDB
- <>和 != 是對值進行的判定搂鲫,但是NULL不是一種“值”傍药,NULL的含義是指的這個列所指定的行值是不是為空存放的空間是不是為空。所以在平時判定一個列的null值是一般是用 is null 或者 is not null
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
查詢時是否使用了索引和查詢的時候是否掃描全表并不是完全相關(guān)聯(lián)的魂仍,查詢條件中使用了不等于操作符(<>拐辽、!=)的select語句執(zhí)行慢解決方法:通過把不等于操作符改成or,可以使用索引擦酌,避免全表掃描薛训。例如,把column<>’aaa’仑氛,改成column<’aaa’ or column>’aaa’,就可以使用索引了。
-
- 利用set profiling = 1 打開開關(guān)
- 利用 SHOW PROFILES 查看語句的query_id
- 利用下面的語句對sql語句進行分析
在ICP之前锯岖,Mysql在復(fù)合索引中介袜,第一列是范圍查詢,第二列通常是無法使用索引的出吹,建議第一列是=,<=>,is null遇伞。而在ICP出來之后,就沒有了這個限制捶牢。
SHOW PROFILE [type [, type] ... ]
[FOR QUERY n]
[LIMIT row_count [OFFSET offset]]
type:
ALL
| BLOCK IO
| CONTEXT SWITCHES
| CPU
| IPC
| MEMORY
| PAGE FAULTS
| SOURCE
| SWAPS
不要將table的主鍵設(shè)置的過長鸠珠,如果過長的話會導(dǎo)致二級索引所占磁盤空間很大