Sql与索引基础

Distinct,limit,group by(having关键字什么时候用)

Distinct去重

SELECT DISTINCT Company FROM Orders 根据某字段去重
SELECT DISTINCT * FROM Orders 根据所有字段去重

limit限制行数

group by 分组,having 对分组之后结果进行限制

GROUP BY子句之后使用Having子句
可应用限定条件进行分组,以便系统仅对满足条件的组返回结果。因此,在GROUP BY子句后面包含了一个HAVING子句。HAVING类似于WHERE(唯一的差别是WHERE过滤行,HAVING过滤组)AVING支持所有WHERE操作符。

常见索引的类型,索引的数据结构一般是什么

常见索引类型

Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。
FULLTEXT(如倒排)
BTREE(oracle默认索引)
详细参考该博客https://www.cnblogs.com/yuan-shuai/p/3225417.html

  • 普通索引
    这是最基本的索引,它没有任何限制,比如上文中为title字段创建的索引就是一个普通索引,MyIASM中默认的BTREE类型的索引,也是我们大多数情况下用到的索引。

  • 唯一索引
    索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

  • 全文索引(FULLTEXT)
    MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。

  • 单列索引、多列索引
    多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

  • 组合索引(最左前缀)
    平时用的SQL查询语句一般都有比较多的限制条件,所以为了进一步榨取MySQL的效率,就要考虑建立组合索引。例如上表中针对title和time建立一个组合索引:ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))。建立这样的组合索引,其实是相当于分别建立了下面两组组合索引:
    –title,time
    –title
    为什么没有time这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这两列的查询都会用到该组合索

  • 建立索引时,要选中索引类型

  • CREATE FULLTEXT INDEX index_content ON article(content)

  • CREATE UNIQUE INDEX indexName ON table(column(length))

  • CREATE INDEX index_name ON table(column(length))

多字段组成的索引什么时候能用到什么时候不能用到。范围查询使用索引的特点

  • 联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。两个或更多个列上的索引被称作复合索引。
  • 哪些字段可以建索引,一般都where、order by 或者 group by 后面的字段。
  • 多个字段组合标识一个信息的时候,如人名与电话,这两个字段组合索引有较大意义
  • 利用索引中的附加列,可以缩小搜索的范围
  • ==范围查询使用索引特点:==范围查询后,其他字段将不再走索引
    如:索引建立是三个字段 顺序是a b c ,条件是 a=1 and b>60 and c=2,则c不再走索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值