MySQL覆盖索引

MySQL覆盖索引,第1张

一、覆盖索引

覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。

如果一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。

二、覆盖索引实例

1.未建立索引前

2.添加覆盖索引

三、总结

当一条查询语句符合覆盖索引条件时,sql只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表 *** 作,减少I/O提高效率。

使用覆盖索引Innodb比MyISAM效果更好----InnoDB使用聚集索引组织数据,如果二级索引中包含查询所需的数据,就不再需要在聚集索引中查找了

注:遇到以下情况,执行计划不会选择覆盖查询

1.select选择的字段中含有不在索引中的字段 ,即索引没有覆盖全部的列。

2.where条件中不能含有对索引进行like的 *** 作。

假设两个表结构完全相同。不同的话就需要指明所有的列。

Replace table2 Select * From table1

假设表名叫t1, 有id, name两个字段,其中id是主键,或者是唯一的字段

REPLACE t1 (id, name) VALUES(1, 'alan')

多条情况:

REPLACE t1 (id, name) VALUES(1, 'alan'), (2, 'lstt'), (3, 'ssnl')

原理是:id不存在是就插入一条,存在是就自动删除原来的,再插入新的

所以,REPLACE不能只修改其中的一个

如果是后者情况,只能先判断是否存在,再UPDATE了

比如:

1、selec name as “姓名” ,sex as "性别" from user

2、select u.name as “姓名”,o.name as "英文名" ,u.sex as "性别" from user u ,other o where u.id = o.id

as不是给表里的字段取别名,而是给查询的结果字段取别名。

其目的是让查询的结果展现更符合人们观看习惯,在多张表查询的时候可以直接的区别多张表的同名的字段。

扩展资料:

SQL别名:

SQL别名用于为表或表中的列 提供临时名称。

SQL别名通常用于使表名或列名更具可读性。

SQL一个别名只存在于查询期间。

别名使用AS关键字赋予。

在下列情况下使用别名:

1,查询涉及多个表

2,用于查询函数

3,需要把两个或更多的列放在一起

4,列名长或可读性差

语法

1、表名的别名语法:

SELECT 列名

FROM 表名 AS 别名

2、列名的别名语法:

SELECT 列名 AS 别名

FROM 表名

3、表名和列名的别名混合使用语法:

SELECT 列名 AS 别名

FROM 表名 AS 别名

语法举例

1、使用表名称别名

有两个表分别是:"Persons" 和 "Product_Orders"。分别为它们指定别名 "p" 和 "po"。列出 "John Adams" 的所有定单。

SELECT po.OrderID, p.LastName, p.FirstName

FROM Persons AS p, Product_Orders AS po

WHERE p.LastName='Adams' AND p.FirstName='John'

2、使用列名称别名

查询 Persons 表中的 LastName 列 (为其定义别名 '姓氏')和 FirstName 列(为其定义别名 ‘名字’),输出所有结果值。

SELECT LastName AS 姓氏, FirstName AS 名字

FROM Persons


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8438719.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存