手把手教你:微信棋牌源碼 MySQL的前綴索引
MySQL的前綴索引
微信棋牌源碼咨詢Q 2171793408
官網地址:http://wowotouba.com/h5
MySQL的前綴索引指的是對指定的欄位的前面幾位建立的索引。
Altertable Table_Name add key(column_name(prefix_len));
或者
Createindex index_name on Table_Name(column_name(prefix_len));
建立前綴索引後,可以直接當做普通索引進行過濾。
Select ..from table_name where column_name=’…’;
前綴索引的最大的好處是降低索引的大小。另外,由於InnoDB單列索引長度不能超過767bytes,如果是text或者blob字段,直接建立索引可能會報錯,而前綴索引可以繞過這一限制。
微信棋牌源碼咨詢Q 2171793408
官網地址:http://wowotouba.com/h5
做個測試看一下。
delimiter;;
dropFUNCTION if exists random_str;;
CREATEFUNCTION random_str(n int) RETURNS varchar(30000)
begin
declarereturn_str varchar(30000) default "";
declare iint default 0;
whilelength(return_str) < n do
setreturn_str=concat(return_str,md5(rand()));
endwhile;
returnsubstring(return_str,1,n);
end;;
首先,創建一個生成超過1000長度的隨機字符串的函數。
創建測試表
CREATETABLE TEST_PREFIX_IND (
ID INT(10) PRIMARY KEY AUTO_INCREMENT,
NORMAL_STR VARCHAR(20) ,
LONG_STR VARCHAR(1000),
TEXT_STR TEXT,
BLOB_STR BLOB
);
插入10000行記錄:
drop procedure if exists init_test_prefix_ind;;
createprocedure init_test_prefix_ind(n int)
begin
declare iint default 0;
while i< n do
insertinto test_prefix_ind(NORMAL_STR,long_str, TEXT_STR,BLOB_STR)
values(random_str(20),random_str(rand()*1000+1),random_str(rand()*1000+1),random_str(rand()*300+1));
seti=i+1;
endwhile;
end;;
callinit_test_prefix_ind(10000);;
嘗試在類型為varchar(1000)的LONG_STR創建索引
altertable test_prefix_ind add key(LONG_STR);;
成功了,但是Sub_part顯示為767,表示系統自動創建了前綴長度為767的前綴索引;
微信棋牌源碼咨詢Q 2171793408
官網地址:http://wowotouba.com/h5
手把手教你:微信棋牌源碼 MySQL的前綴索引