1. 程式人生 > >手把手教你:微信棋牌源碼 MySQL的前綴索引

手把手教你:微信棋牌源碼 MySQL的前綴索引

行記錄 col .com random post lte com exist nor

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的前綴索引