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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

前缀索引

發(fā)布時間:2025/6/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前缀索引 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ? ? ? ? ?當(dāng)索引是很長的字符序列時,這個索引將會很占內(nèi)存,而且會很慢,這時候就會用到前綴索引了。所謂的前綴索引就是去索引的前面幾個字母作為索引,但是要降低索引的重復(fù)率,索引我們還必須要判斷前綴索引的重復(fù)率。先看這樣一張表:

mysql> select * from test; +----------+-------+ | name | score | +----------+-------+ | zhangsan | 123 | | wangwu | 345 | | zhaoliu | 234 | | lisisi | 687 | +----------+-------+ 4 rows in set (0.08 sec)

如果以name作為索引,當(dāng)name對應(yīng)的字符串很長時,就要考慮索引的占用空間和效率問題。這時候就需要引入前綴索引,在使用前綴索引時,首先要去比較重復(fù)率。

mysql> select 1.0*count(distinct name)/count(*) from test; +-----------------------------------+ | 1.0*count(distinct name)/count(*) | +-----------------------------------+ | 1.00000 | +-----------------------------------+ 1 row in set (0.00 sec)mysql> select 1.0*count(distinct left(name,2))/count(*) from test; +-------------------------------------------+ | 1.0*count(distinct left(name,2))/count(*) | +-------------------------------------------+ | 0.75000 | +-------------------------------------------+ 1 row in set (0.00 sec)mysql> select 1.0*count(distinct left(name,1))/count(*) from test; +-------------------------------------------+ | 1.0*count(distinct left(name,1))/count(*) | +-------------------------------------------+ | 0.75000 | +-------------------------------------------+ 1 row in set (0.00 sec)mysql> select 1.0*count(distinct left(name,3))/count(*) from test; +-------------------------------------------+ | 1.0*count(distinct left(name,3))/count(*) | +-------------------------------------------+ | 0.75000 | +-------------------------------------------+ 1 row in set (0.00 sec)mysql> select 1.0*count(distinct left(name,4))/count(*) from test; +-------------------------------------------+ | 1.0*count(distinct left(name,4))/count(*) | +-------------------------------------------+ | 1.00000 | +-------------------------------------------+ 1 row in set (0.00 sec)mysql> select 1.0*count(distinct left(name,2))/count(*) from test; +-------------------------------------------+ | 1.0*count(distinct left(name,2))/count(*) | +-------------------------------------------+ | 0.75000 | +-------------------------------------------+ 1 row in set (0.00 sec)mysql> select 1.0*count(distinct left(name,5))/count(*) from test; +-------------------------------------------+ | 1.0*count(distinct left(name,5))/count(*) | +-------------------------------------------+ | 1.00000 | +-------------------------------------------+ 1 row in set (0.00 sec)

其中l(wèi)eft函數(shù)為字符串截取函數(shù)。

select 1.0*count(distinct name)/count(*) from test這是比較整個name的重復(fù)率,當(dāng)時這是最好的情況。然后分別截取name字符的前幾個字母,最后選取的計算值要接近整個取整個name時得出的計算值,然后再選中占用空間小的。由上面執(zhí)行的結(jié)果可知應(yīng)選中name的前4個字母作為索引最為適合。

創(chuàng)建索引:

mysql> alter table test add key(name(4)); Query OK, 4 rows affected (0.15 sec) Records: 4 Duplicates: 0 Warnings: 0

隨后就可以正常按name字符進行查找了。

?

?

總結(jié)

以上是生活随笔為你收集整理的前缀索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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