日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

mysql 前缀索引 语法_MySQL 前缀索引(MySQL下载与安装)

發(fā)布時(shí)間:2023/12/15 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 mysql 前缀索引 语法_MySQL 前缀索引(MySQL下载与安装) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

索引前綴

使用 字符串列的索引規(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。