MYSQL(一)数据库索引类型,索引优点
admin
2023-05-01 05:42:15
0

索引在mysql中也叫做键(key),是存储引擎用于快速找到记录的一种数据结构。

索引结构类型(常见有两种)

1. B-Tree索引

大多数mysql引擎都支持这种索引;

        1.B-Tree通常意味着所有的值都是按顺序存储的,

        2.并且每一个叶子页到根的距离相同

存储引擎不需要进行全表扫描来获取需要的数据,取而代之是从索引的根节点开始进行搜索;

适用于:

A. 全键值查找(全值匹配)

B. 键值范围(若是有多列的合并索引,需要精确匹配某一列并范围匹配另一列)

C. 键前缀查找

D. 按顺序查找(order by)

限制:

A. 如果不是按照索引的最左列开始查找,则无法使用索引

B. 不能跳过索引中的列

C. 如果查询中有某个列的范围查询,其右边的所有列都无法使用索引优化查询

2. 哈希索引

在mysql中,只有memory引擎显式支持哈希索引;基于哈希表实现,只有精确匹配索引所有列的查询才有效;对于每一行数据,存储引擎会对所有的索引列计算一个哈希码,不同的键值行计算出的哈希码不一样,哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针;(hash索引结构:hash值:指针)

优势:

查找速度非常快

限制:

A. 无法用于排序

B. 不支持部分索引列匹配查找

C. 只支持等值比较查询

存储引擎不支持哈希索引时,可以建立自定义哈希:

如:建表pseudohash:id,url,url_crc;

建立触发器:insert数据时 set new.url_crc = crc32(new.url);

Update数据时 set new.url_crc = crc32(new.url);

查找:select url , url_crc from pseudohash where url_crc = crc32(“www.baidu.com”) and url = “www.baidu.com”;

在where语句中带人hash值和对应列值。



索引功能类型

1.普通索引(INDEX 

    CREATE INDEX index_name ON table_name (column_list);

2.唯一索引(UNIQUE INDEX

    mysql数据库索引列的值必须唯一,但允许有空置。如果是组合索引,列值的组合必须唯一。

    CREATE UNIQUE INDEX index_name ON table_name (column_list)

3.主键索引(PRIMARY KEY)

    是一种特殊的唯一索引,不允许有空置,一般在建表时创建

    CREATE TABLE table_name ( 

     ID INT NOT NULL, 

     [column] VARCHAR(16) NOT NULL, 

    PRIMARY KEY(ID)   

     );  

4.全文索引:(FULLTEXT)只可以用在MyISAM引擎

    对大数据文本进行索引,在建立的索引中对要查找的单词进行搜索,定位哪些文本数据包括要搜索的单词。

    1,建立索引   2,在索引中搜索定位

    //针对content做了全文索引:

    CREATE TABLE `table` (

    `id` int(11) NOT NULL AUTO_INCREMENT ,

    `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,

    `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,

    PRIMARY KEY (`id`),

    FULLTEXT (content) );

    查找时:

    SELECT * FROM article WHERE MATCH( content) AGAINST('想查询的字符串')



索引的优点:

1. 可以让服务器快速定位到表的指定位置,大大减少了服务器需要扫描的数据量

2. 最常见的b-tree索引按照顺序存储数据,可以用来做order by和group by,帮助服务器避免排序和临时表,将随机I/O变为顺序I/O

3. 因为索引中存储了实际的列值,某些查询只需要使用索引就能完成全部查询


索引优化

      1. 前缀索引

         问题:有时候索引需要存储很长的字符串,会让索引变得大且慢

         解决:1. hash索引 2. 前缀索引

         索引的选择性:不重复的索引值 / 数据表的记录总数,数值越高性能越好;

                            唯一索引的选择性是1,性能是最好的

          计算适合的前缀长度,使前缀的选择性接近于完整列的选择性。Mysql无法使用前缀索引做order by和group by,也无法使用前缀索引做覆盖扫描;

       2. 选择合适的索引列顺序

          将选择性最高的列放在索引最前列


相关内容

热门资讯

汇正财经贺峰的一对一指导服务怎...   对于考虑购买证券投资顾问服务的投资者来说,'一对一指导服务怎么样'是一个重要的考量维度。需要首先...
重庆失联00后网格员龚宝冬确认...   重庆失联00后网格员龚宝冬确认遇难  【重庆失联00后网格员龚宝冬确认遇难】2026年7月29日...
震惊!女子种出二三十万斤玉米后... 女子种出二三十万斤玉米后懵圈了  【女子种出二三十万斤玉米后懵圈了】7月28日消息,商华颖,杭州千岛...
烈焰熊熊,堪比“原子弹”,欧洲... 据美国有线电视新闻网(CNN)7月29日报道,席卷法国西南部的大片野火燃烧得如此猛烈,以至于形成了一...
外交部:对日本熊本县地震遇难者... 据凤凰卫视报道,针对日本熊本县发生强震造成人员伤亡,中国外交部发言人毛宁7月29日在例行记者会上表示...
高铁喧哗被劝阻后叫嚣全家体制内... “女子高铁喧哗被劝阻后叫嚣全家体制内”一事迎来官方通报。据新京报报道,7月29日,辽宁北票市公安局发...
广东专业蓝牙耳机定制厂家推荐,... 在珠三角腹地,广东早已成为全球蓝牙耳机产业链的“心脏地带”。从深圳华强北的声学元件批发,到东莞、惠州...
格雷厄姆葬礼变地缘竞价场!两大... 有些葬礼,送别的是逝者;有些葬礼,演的却是活人最现实的政治博弈。当地时间7月28日,美国老牌鹰派参议...
一道小学数学题难住3名医学博士... 3名不同学校的博士同做一道数学题,谁最厉害?近日,一陕西网友发布的视频引发热议。29日,视频发布者“...
华为全新“小艺任务”亮相:整合... 7月29日,在华为鸿蒙电脑新品技术沟通会上,终端云服务小艺业务部总裁贾永利宣布,小艺将迎来“从对话到...