mysql 前缀索引 语法_MySQL 前缀索引(MySQL下载与安装)
索引前綴
使用 字符串列的索引規(guī)范中的語(yǔ)法,您可以創(chuàng)建僅使用列首字符的索引 。以這種方式僅索引列值的前綴可以使索引文件小得多。為a 或 column 編制索引時(shí) , 必須為索引指定前綴長(zhǎng)度。例如: col_name(N)NBLOBTEXT
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
前綴最長(zhǎng)可以為1000個(gè)字節(jié)(InnoDB表中為767個(gè)字節(jié) ,除非已 innodb_large_prefix設(shè)置)。
注意 前綴限制以字節(jié)為單位,而在前綴長(zhǎng)度CREATE TABLE, ALTER TABLE和 CREATE INDEX語(yǔ)句被解釋為非二進(jìn)制串類型的字符數(shù)(CHAR, VARCHAR, TEXT對(duì)于二進(jìn)制串類型),并且字節(jié)數(shù)(BINARY, VARBINARY, BLOB)。為使用多字節(jié)字符集的非二進(jìn)制字符串列指定前綴長(zhǎng)度時(shí),請(qǐng)考慮到這一點(diǎn)。
如果搜索詞超過(guò)索引前綴長(zhǎng)度,則使用索引排除不匹配的行,然后檢查其余行是否可能匹配。
當(dāng)要索引的列字符很多時(shí) 索引則會(huì)很大且變慢
( 可以只索引列開(kāi)始的部分字符串 節(jié)約索引空間 從而提高索引效率 )
原則: 降低重復(fù)的索引值
例如現(xiàn)在有一個(gè)地區(qū)表
area
gdp
code
chinaShanghai
100
aaa
chinaDalian
200
bbb
usaNewYork
300
ccc
chinaFuxin
400
ddd
chinaBeijing
500
eee
發(fā)現(xiàn) area 字段很多都是以 china 開(kāi)頭的
那么如果以前1-5位字符做前綴索引就會(huì)出現(xiàn)大量索引值重復(fù)的情況
索引值重復(fù)性越低 查詢效率也就越高
前綴索引測(cè)試
// 創(chuàng)建一個(gè)測(cè)試表
CREATE TABLE `x_test` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`x_name` varchar(255) NOT NULL,
`x_time` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4145025 DEFAULT CHARSET=utf8mb4
// 添加200萬(wàn)條測(cè)試數(shù)據(jù)
INSERT INTO x_test(x_name,x_time) SELECT CONCAT(rand()*3300102,x_name),x_time FROM x_test WHERE id < 30000;
1.在無(wú)任何索引的情況下隨便查詢一條
SELECT * FROM x_test WHERE x_name = ‘1892008.205824857823401.800099203178258.8904820949682635656.62526521254’;
查詢時(shí)間:2.253s
2.添加前綴索引 ( 以第一位字符創(chuàng)建前綴索引 )
alter table x_test add index(x_name(1))
再次查詢相同sql語(yǔ)句
SELECT * FROM x_test WHERE x_name = ‘1892008.205824857823401.800099203178258.8904820949682635656.62526521254’;
查詢時(shí)間:3.291s
當(dāng)使用第一位字符創(chuàng)建前綴索引后 貌似查詢的時(shí)間更長(zhǎng)了
因?yàn)橹坏谝晃蛔址运饕档闹刈x性太大了
200萬(wàn)條數(shù)據(jù)全以數(shù)字開(kāi)頭那么平均20萬(wàn)條的數(shù)據(jù)都是相同的索引值
3.重新建立前綴索引 這次以前4位字符來(lái)創(chuàng)建
alter table x_test add index(x_name(4));
再次查詢相同sql語(yǔ)句
SELECT * FROM x_test WHERE x_name = ‘1892008.205824857823401.800099203178258.8904820949682635656.62526521254’;
查詢時(shí)間:0.703s
這次以前4位創(chuàng)建索引 大大減少了索引值的重復(fù)性 查詢速度從3秒提升到0.7秒
4.200萬(wàn)條數(shù)據(jù)都以數(shù)字開(kāi)頭 而0-9排列組合7位則可達(dá)到千萬(wàn)種組合
也就是以前7位來(lái)做索引則不會(huì)出現(xiàn)重復(fù)索引值的情況了
alter table x_test add index(x_name(7));
再次查詢相同sql語(yǔ)句
SELECT * FROM x_test WHERE x_name = ‘1892008.205824857823401.800099203178258.8904820949682635656.62526521254’;
查詢時(shí)間:0.014s ( 首次執(zhí)行無(wú)緩存狀態(tài)下 )
總結(jié)
以上是生活随笔為你收集整理的mysql 前缀索引 语法_MySQL 前缀索引(MySQL下载与安装)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql版本 time类型
- 下一篇: 谁在中国“围猎”AIGC?