接上一篇博客:http://my.oschina.net/twinkling/blog/180619。肯定了表設計: mysql
CREATE TABLE `customer` ( `Name` varchar(80) NOT NULL, `CardNo` varchar(10) DEFAULT NULL, `Descriot` varchar(100) DEFAULT NULL, `CtfTp` varchar(4) DEFAULT NULL, `CtfId` varchar(40) DEFAULT NULL, `Gender` varchar(8) DEFAULT NULL, `Birthday` int(9) DEFAULT NULL, `Address` varchar(100) DEFAULT NULL, `Zip` int(10) DEFAULT NULL, `Dirty` varchar(20) DEFAULT NULL, `District1` varchar(6) DEFAULT NULL, `District2` varchar(4) DEFAULT NULL, `District3` varchar(6) DEFAULT NULL, `District4` varchar(6) DEFAULT NULL, `District5` varchar(8) DEFAULT NULL, `District6` varchar(20) DEFAULT NULL, `FirstNm` varchar(50) DEFAULT NULL, `LastNm` varchar(20) DEFAULT NULL, `Duty` varchar(20) DEFAULT NULL, `Mobile` varchar(40) DEFAULT NULL, `Tel` varchar(40) DEFAULT NULL, `Fax` varchar(40) DEFAULT NULL, `EMail` varchar(60) DEFAULT NULL, `Nation` varchar(25) DEFAULT NULL, `Taste` varchar(100) DEFAULT NULL, `Education` varchar(20) DEFAULT NULL, `Company` varchar(80) DEFAULT NULL, `CTel` varchar(20) DEFAULT NULL, `CAddress` varchar(60) DEFAULT NULL, `CZip` int(8) DEFAULT NULL, `Family` int(10) DEFAULT NULL, `Version` datetime DEFAULT NULL, `id` int(11) NOT NULL, PRIMARY KEY (`id`), KEY `index_Name_Id` (`Name`, `id`) USING BTREE, KEY `index_CtfId_Id` (`CtfId`, `id`) USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;
因爲是查詢爲主的數據庫,因此選用了MyISAM數據庫引擎。開始使用前須要配置一下參數,參考文章:http://isky000.com/database/mysql-perfornamce-tuning-cache-parameter ,主要修改這個參數。 sql
key_buffer_size (global)
Key Buffer 多是你們最爲熟悉的一個 MySQL 緩存參數了,尤爲是在 MySQL 沒有更換默認存儲引擎的時候,不少朋友可能會發現,默認的 MySQL 配置文件中設置最大的一個內存參數就是這個參數了。key_buffer_size 參數用來設置用於緩存 MyISAM存儲引擎中索引文件的內存區域大小。若是咱們有足夠的內存,這個緩存區域最好是可以存放下咱們全部的 MyISAM 引擎表的全部索引,以儘量提升性能。 此外,當咱們在使用MyISAM 存儲的時候有一個及其重要的點須要注意,因爲 MyISAM 引擎的特性限制了他僅僅只會緩存索引塊到內存中,而不會緩存表數據庫塊。因此,咱們的 SQL 必定要儘量讓過濾條件都在索引中,以便讓緩存幫助咱們提升查詢效率。因此,該值是越大越好,在/etc/my.cnf文件的[mysqld]頭下,增長:
key_buffer_size=1024M #個人系統內存是2G
注意:1024M是根據系統的內存來設置,要留點內存給系統用。 數據庫
爲了不亂碼問題,所有采用utf8編碼。 緩存
之因此須要創建複合索引: 性能
可是,在索引查詢的時候須要注意幾個問題: 優化
條件掃描時,不要搞這種: 編碼
# 雖然說是要走索引,可是回表操做太慢 select * from customer where name like '陳%'; # 沒有關聯的索引也不要使用, name 和 ctfid 之間沒有關聯 select id, name, ctfid from customer_bk where name like '徐%' ;
慎用兩個索引條件一塊兒使用,同1,部分走索引,而後回表取數據,再對比 spa
explain select id from customer_bk where name like '徐%' and ctfid like '5%'; # 哪一個條件放前面都無所謂,MySQL內部優化了,取數據量少的索引,而後再對比其餘條件