数据库索引创建索引

在数据库中,创建索引是查询优化的关键步骤。
常见条件是WHERE子句中出现的字段列表。
例如,创建一个名为mytable的表,如下所示:

sqlCREATEABLEmytable(idserialPrimarykey,category_idintnotnulldefault0,user_idintnotnulldefault0,adddateintnotnulldefault0);

如果查询表达式类似于:

sqlSELECT*FROMmytableWHEREcategory_id=1;

为category_id创建一个简单索引:

sqlCREATEINDEXmytable_categoryidONmytable(category_id);

很多选择条件,如:

sqlSELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2;

错误的访问是创建user_id的列表必须创建多个索引,而不是一个索引:

sqlCREATEINDEXmytable_categoryid_useridONmytable(category_id,user_id);

命名时,通常使用“名称_字段名称1_字段名称2”;相同的拟合比拟合指数更容易。

要测试数据库是否将使用这些数据,请使用EXPLAIN命令。
以Postgres为例:

sqlEXPLAINSELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2;

Postgres返回:

plaintextNOTICE:QUERYPLAN:IndexScanusingmytable_categoryid_useridonmytable(cost=0.00..2.02rows=1width=16

这表示用户目录以及用户创建的另一个目录帮助快速识别正确的列表。

当子句为ORDERBY时,例如:

sqlSELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2ORDERBYadddateDESC:

sqlCREATEINDEX;mytable_categoryid_userid_adddateONmytable(category_id,user_id,adddate);

创建的列表名称将被截断为“mytable_categoryid_userid_addda”。

测试事件:

sqlEXPLAINSELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2ORDERBYadddateDESC;

返回:

IndexScanusingmytable_categoryid_userid_adddaonmytable(cost=0.00..2.02rows=1width=16

排序数据库冗余操作,可见性能降低。
为了提高效率,提供了额外的提示。

通过调整查询语句,优化器可以使用数据库索引,例如:

sqlEXPLAINSELECT*FROMmytableWHEREcategory_id=1ANDuser_id=2ORDERBYcategory_idDESC,user_idDESC,adddateDESC;

返回返回:

plaintextNOTICE:QUERYPLAN:IndexScanBackwardusingmytable_categoryid_userid_adddaonmytable(cost=0.00..2.02rows=1width=16

使用预期的索引并从后到前读取以避免排序。

当处理复杂查询时,比如查询多个表,特别是当UBI子句中的字段来自多个表时,这个如果有必要,应该为每个表创建单独的索引,并使用EXPLANATION,如果使用索引会提高性能。
对于经常更新和插入的表,不需要创建单独的索引,因为WHERE。
很少使用子句。
对于小表,排序并不昂贵,并且不需要额外的信息。

创建索引的原理是从查询需求来确定,并通过EXPLANATION命令来验证其使用情况。
每个数据库的优化器都不同,性能本身需要根据实际情况进行调整。

数据库表不大,不需要立即创建列表。
可以使用OPTIMIZETABLE等命令来优化现有表。
综上所述,索引的创建和使用应根据搜索的具体需求和性能来确定。

扩展索引

索引是一种组织数据库表中一个或多个列的值的结构。

创建唯一索引的sql语句是什么?

创建唯一索引的SQL语句如下:

CREATE[UNIQUE|CLUSTERED]INDEXINDEX_NAMEONTABLE_NAME(PROPERTY_NAME)

其中UNIQUE和CLUSTERED是可选的,必须创建一个分别是唯一索引和簇索引。

具体解释是:UNIQUE:表示该索引的每个值只对应唯一的数据。
CLUSTERED:表示要创建的索引是聚集索引,是一种索引元素的顺序与表中记录的物理顺序一致的索引组织。

如何使用sql语句增加普通索引

clusteredindexxxxonyyy其中,普通索引理解为聚集索引,即聚集的,xxx是索引的名称,yyy是表的名称。