精华内容
下载资源
问答
  • CREATE TABLE 语句用于创建数据库中的表。 SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... ) 数据类型(data_type)规定了列可容纳何种数据类型。...

    CREATE TABLE 语句

    CREATE TABLE 语句用于创建数据库中的表。

    SQL CREATE TABLE 语法

    CREATE TABLE 表名称
    (
    列名称1 数据类型,
    列名称2 数据类型,
    列名称3 数据类型,
    ....
    )
    

    数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:

    数据类型 描述
    • integer(size)
    • int(size)
    • smallint(size)
    • tinyint(size)
    仅容纳整数。在括号内规定数字的最大位数。
    • decimal(size,d)
    • numeric(size,d)

    容纳带有小数的数字。

    "size" 规定数字的最大位数。"d" 规定小数点右侧的最大位数。

    char(size)

    容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。

    在括号中规定字符串的长度。

    varchar(size)

    容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。

    在括号中规定字符串的最大长度。

    date(yyyymmdd) 容纳日期。

    SQL CREATE TABLE 实例

    本例演示如何创建名为 "Person" 的表。

    该表包含 5 个列,列名分别是:"Id_P"、"LastName"、"FirstName"、"Address" 以及 "City":

    CREATE TABLE Persons
    (
    Id_P int,
    LastName varchar(255),
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255)
    )
    

    Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。

    空的 "Persons" 表类似这样:

    Id_P LastName FirstName Address City
             

    可使用 INSERT INTO 语句向空表写入数据。

    ----------------------------------------------------------------------------------------------------------------------------------------------

    一个完整的Oracle建表的例子

     
    建表一般来说是个挺简单的事情,但是Oracle的建表语句有很多可选的参数,有些我们可能平时不太用,用的时候又不知道怎么用,这里就写一个较完整的建表的例子:
    [sql] 
    CREATE TABLE banping  
      (id  NUMBER(5)   
           CONSTRAINT banping_id_pk PRIMARY KEY,   
       last_name VARCHAR2(10)   
           CONSTRAINT banping_last_name_nn NOT NULL,  
       first_name VARCHAR2(10) NOT NULL UNIQUE,  
       userid VARCHAR2(8)   
           CONSTRAINT banping_userid_uk UNIQUE,  
      start_date DATE DEFAULT SYSDATE,  
      title VARCHAR2(10),  
      dept_id NUMBER(7)  
           CONSTRAINT banping_dept_id_fk REFERENCES dept(id),  
      salary NUMBER(11,2),  
    user_type VARCHAR2(4)  
          CONSTRAINT banping_user_type_ck CHECK  
           (user_type IN(‘IN’,'OUT’)),  
    CONSTRAINT banping_uk_title UNIQUE (title,salary)  
     )  
    INITRANS 1 MAXTRANS 255  
    PCTFREE  20  PCTUSED  50  
    STORAGE( INITIAL  1024K  NEXT  1024K  PCTINCREASE  0  MINEXTENTS  1  MAXEXTENTS  5)  
    TABLESPACE  data;  
     
    解释说明如下:
    语法
    [sql] 
    CREATE  TABLE  [schema.]table  
    (column  datatype [, column  datatype] … )  
    [TABLESPACE  tablespace]  
     [PCTFREE  integer]  
     [PCTUSED  integer]  
     [INITRANS  integer]  
     [MAXTRANS  integer]  
     [STORAGE  storage-clause]  
     [LOGGING | NOLOGGING]  
     [CACHE | NOCACHE] ];  
     
    Schema:表的所有者
    Table:表名
    Column:字段名
    Datatype:字段的数据类型
    Tablespace:表所在的表空间
    Pctfree:为了行长度增长而在每个块中保留的空间的量(以占整个空间减去块头部后所剩余空间的百分比形式表示),当剩余空间不足pctfree时,不再向该块中增加新行。
    Pctused:在块剩余空间不足pctfree后,块已使用空间百分比必须小于pctused后,才能向该块中增加新行。
    INITRANS:在块中预先分配的事务项数,缺省值为1
    MAXTRANS:限定可以分配给每个块的最大事务项数,缺省值为255
    STORAGE:标识决定如何将区分配给表的存储子句
    LOGGING:指定表的创建将记录到重做日志文件中。它还指定所有针对该表的后续操作都将被记录下来。这是缺省设置。
    NOLOGGING:指定表的创建将不被记录到重做日志文件中。
    CACHE:指定即使在执行全表扫描时,为该表检索的块也将放置在缓冲区高速缓存的LRU列表最近使用的一端。
    NOCACHE:指定在执行全表扫描时,为该表检索的块将放置在缓冲区高速缓存的LRU列表最近未使用的一端。
    STORAGE子句:
    INITIAL:初始区的大小
    NEXT:下一个区的大小
    PCTINCREASE:以后每个区空间增长的百分比
    MINEXTENTS:段中初始区的数量
    MAXEXTENTS:最大能扩展的区数
     如果已为表空间定义了MINIMUM EXTENT,则表的区大小将向上舍入为MINIMUM EXTENT值的下一个较高的倍数。
    外键关联的表dept的id列必须是唯一的或者是自身的主键,如不是可以用以下语句填加:
    [sql] 
    alter table dept  add constraint dept_id_pk primary key(id);  
    块空间使用参数可用来控制对数据段和索引段空间的使用:
    控制并发性参数:
    INITRANS和MAXTRANS指定初始的和最大的事务位置数,这些事务位置在索引块或者数据块内创建。事务位置用来存储在某一事件点上正在对块进行更改的事务的信息。一个事务只占用一个事务位置,即使它正在更改多行或者多个索引条目。 INITRANS对数据段的缺省值为1,对索引段的缺省值为2,以保证最低程度的并发。例如,如果INITRANS设为3,则保证至少3个事务可以同时对块进行更改。如果需要,也可以从块空闲空间内分配其它事务位置,以允许更多的事务并发修改块内的行。 MAXTRANS的缺省值为255,它设置可更改数据块或者索引块的并发事务数的限制。设置后,该值限制事务位置对空间的使用,从而保证块内有足够的空间供行或者索引数据使用。
    控制数据空间使用的参数:
    数据段的PCTFREE指定每个数据块中保留空间的百分比,用于因更新块内的行而导致的增长。PCTFREE的缺省值为10%。 数据段的PCTUSED代表Oracle服务器试图为表内的每个数据块维持的已用空间的最低百分比。如果一个块的已用空间低于PCTUSED,则将这块放回到空闲列表中。段的空闲列表示容纳将来所插入内容的可选择块的列表。根据缺省,每个段在创建时都有一个空闲列表。PCTUSED的缺省值为40%。 PCTFREE和PCTUSED都按可用数据空间百分比来计算,可用数据空间是从整个块大小减去块头空间后剩余的块空间。 块空间使用参数只能针对段指定,而不能在表空间级别设置。
    下面步骤介绍对PCTFREE=20且PCTUSED=40的数据段如何管理块内空间:
    1.向块中插入行,直到块内的空闲空间小等于20%。当行所占用的块内数据空间达到80%(100-PCTFREE)或者更多后,即无法再向该块进行插入。
    2.剩余的20%可在行大小增长时使用。例如,更新初始为NULL的列并分配一个值。这样,由于更新,块使用率可能超过80%。
    3.如果由于更新,删除了块内的行或者行大小减少,块使用率可能跌至80%以下。但是,仍然无法向块中插入,直到块使用率跌至PCTUSED以下,在本例中PCTUSED为40%。
    4.当块使用率跌至PCTUSED以下后,该块可用于插入。随着向块内插入行,块使用率增长,重复从步骤1开始的循环。


    展开全文
  • mysql创建索引

    千次阅读 2015-09-25 14:46:27
    CREATE INDEX 语句用于在表中创建索引。 在读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。您可以在表中创建索引,以便更加快速高效地查询数据。 用户无法看到索引,它们只能被用来加速搜索/查询...

    alter table message_text add index(from_id);
    alter table message_text add index(to_id);

    CREATE INDEX 语句用于在表中创建索引。
    在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

    您可以在表中创建索引,以便更加快速高效地查询数据。
    用户无法看到索引,它们只能被用来加速搜索/查询。
    注释:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。因此,理想的做法是仅仅在常常被搜索的列(以及表)上面创建索引。

    SQL CREATE INDEX 语法
    在表上创建一个简单的索引。允许使用重复的值:
    CREATE INDEX index_name
    ON table_name (column_name)
    注释:”column_name” 规定需要索引的列。
    CREATE INDEX 实例
    本例会创建一个简单的索引,名为 “PersonIndex”,在 Person 表的 LastName 列:
    CREATE INDEX PersonIndex
    ON Person (LastName)

    SQL CREATE UNIQUE INDEX 语法
    在表上创建一个唯一的索引。唯一的索引意味着两个行不能拥有相同的索引值。
    CREATE UNIQUE INDEX index_name
    ON table_name (column_name)

    如果您希望以降序索引某个列中的值,您可以在列名称之后添加保留字 DESC:
    CREATE INDEX PersonIndex
    ON Person (LastName DESC)

    假如您希望索引不止一个列,您可以在括号中列出这些列的名称,用逗号隔开:
    CREATE INDEX PersonIndex
    ON Person (LastName, FirstName)

    假如我们创建了一个 testIndex 表:
      CREATE TABLE testIndex(i_testID INT NOT NULL,vc_NameVARCHAR(16) NOT NULL);
      我们随机向里面插入了 1000 条记录,其中有一条i_testID vc_Name 555 erquan
      在查找 vc_Name=”erquan” 的记录 SELECT * FROM testIndex WHERE vc_Name=’erquan’; 时,如果在vc_Name 上已经建立了索引,MySql 无须任何扫描,即准确可找到该记录!相反,MySql 会扫描所有记录,即要查询 1000。以索引将查询速度提高 100 倍。
      一、索引分单列索引和组合索引
      单列索引:即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引:即一个索包含多个列。
      二、介绍一下索引的类型
      1、普通索引。
      这是最基本的索引,它没有任何限制。它有以下几种创建方式:
      (1)创建索引:CREATE INDEX indexNameON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定 length,下同。
      (2)修改表结构:ALTER tableName ADDINDEX [indexName] ON (tableColumns(length))
      (3)创建表的时候直接指定:CREATE TABLEtableName ( […], INDEX [indexName] (tableColumns(length)) ;
      2、唯一索引。
      它与前面的”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
      (1)创建索引:CREATE UNIQUE INDEXindexName ON tableName(tableColumns(length))
      (2)修改表结构:ALTER tableName ADDUNIQUE [indexName] ON (tableColumns(length))
      (3)创建表的时候直接指定:CREATE TABLEtableName ( […], UNIQUE [indexName] (tableColumns(length));
      3、主键索引
      它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLEtestIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOTNULL,PRIMARY KEY(i_testID));当然也可以用 ALTER 命令。记住:一个表只能有一个主键。
      4、全文索引
      MySQL 从 3.23.23 版开始支持全文索引和全文检索。
      删除索引的语法:DROP INDEX index_name ON tableName
      三、单列索引和组合索引
      为了形象地对比两者,再建一个表:
      CREATE TABLE myIndex ( i_testID INT NOT NULLAUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL,i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) );
      在这 10000 条记录里面 7 上 8 下地分布了 5 条vc_Name=”erquan” 的记录,只不过 city,age,school 的组合各不相同。
      来看这条 T-SQL:SELECT i_testID FROMmyIndex WHERE vc_Name=’erquan’ AND vc_City=’郑州’ ANDi_Age=25;
      首先考虑建单列索引:
      在 vc_Name 列上建立了索引。执行 T-SQL 时,MYSQL 很快将目标锁定在了 vc_Name=erquan 的 5 条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉 vc_City 不等于”郑州”的记录,再排除 i_Age 不等于 25 的记录,最后筛选出唯一的符合条件的记录。
      虽然在 vc_Name 上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在 vc_City 和 i_Age 分别建立的单列索引的效率相似。
      为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将 vc_Name,vc_City,i_Age 建到一个索引里:
      ALTER TABLE myIndex ADD INDEX name_city_age(vc_Name(10),vc_City,i_Age);
      建表时,vc_Name 长度为 50,这里为什么用 10 呢?因为一般情况下名字的长度不会超过 10,这样会加速索引查询速度,还会减少索引文件的大小,提高 INSERT 的更新速度。
      执行 T-SQL 时,MySQL 无须扫描任何记录就到找到唯一的记录!!
      肯定有人要问了,如果分别在 vc_Name,vc_City,i_Age上建立单列索引,让该表有 3 个单列索引,查询时和上述的组合索引效率一样吗?大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但 MySQL 只能用到其中的那个它认为似乎是最有效率的单列索引。
      建立这样的组合索引,其实是相当于分别建立了
      vc_Name,vc_City,i_Age
      vc_Name,vc_City
      vc_Name
      这样的三个组合索引!为什么没有 vc_City,i_Age 等这样的组合索引呢?这是因为 mysql 组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个 T-SQL 会用到:
      SELECT * FROM myIndex WHREE vc_Name=”erquan”AND vc_City=”郑州”
      SELECT * FROM myIndex WHREEvc_Name=”erquan”
      而下面几个则不会用到:
      SELECT * FROM myIndex WHREE i_Age=20 AND vc_City=”郑州”
      SELECT * FROM myIndex WHREE vc_City=”郑州”
      四、使用索引
      到此你应该会建立、使用索引了吧?但什么情况下需要建立索引呢?一般来说,在 WHERE和 JOIN 中出现的列需要建立索引,但也不完全如此,因为 MySQL 只对 <,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE(后面有说明)才会使用索引。
      SELECT t.vc_Name FROM testIndex t LEFT JOIN myIndex mON t.vc_Name=m.vc_Name WHERE m.i_Age=20 AND m.vc_City=’郑州’ 时,有对 myIndex 表的vc_City 和 i_Age 建立索引的需要,由于testIndex表的 vc_Name 开出现在了 JOIN 子句中,也有对它建立索引的必要。
      刚才提到了,只有某些时候的 LIKE 才需建立索引?是的。因为在以通配符 % 和 _ 开头作查询时,MySQL 不会使用索引,如 SELECT * FROM myIndex WHERE vc_Name like’erquan%’
    会使用索引,而 SELECT * FROM myIndex WHEREt vc_Namelike’%erquan’ 就不会使用索引了。
      五、索引的不足之处
      上面说了那么多索引的好话,它真的有像传说中那么优秀么?当然会有缺点了。
      1、虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行 INSERT、UPDATE 和DELETE。因为更新表时,MySQL 不仅要保存数据,还要保存一下索引文件。
      2、建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。

      讲了这么多,无非是想利用索引提高数据库的执行效率。不过索引只是提高效率的一个因素。如果你的MySQL有大数据的表,就需要花时间研究建立最优秀的索引或优化查询语句。

    展开全文
  • 下面以表TArticle为例,为BiaoTi、NeiRong两个字段建立全文索引。 开始创建全文目录了: -- SQL语句: create fulltext catalog FTArticle in path “D:\DataBase\FullText“ -- 存储过
    
    

    下面以表TArticle为例,为BiaoTi、NeiRong两个字段建立全文索引。

    开始创建全文目录了:

    -- SQL语句:
    create fulltext catalog FTArticle in path “D:\DataBase\FullText“
    -- 存储过程:
    spfulltextcatalog FTArticle, “create“, “D:\Database\FullText“

    注意:对应的目录必须在服务器上已经建好了。

    然后,在TArticle表上创建全文索引并加入BiaoTi、NeiRong字段。

    -- SQL语句:
    create fulltext
            index on TArticle
            (
                    BiaoTi, NeiRong
            )
            key index pkTArticle
            on FTArticle
    -- 存储过程:
    spfulltexttable “TArticle“, “create“, “FTArticle“, “pkTArticle“
    spfulltextcolumn TArticle, “BiaoTi“, “add“
    spfulltextcolumn TArticle, “NeiRong“, “add“

    注意:pkTArticle请使用PKtableName的方式,否则会提示错误。

    使用全文检索:

    select * from TArticle where contains(NeiRong, “div“)
    select * from TArticle where freetext(NeiRong, “div“)


    查看全文检索的配置情况:

    sphelpfulltextcatalogs -- 检查数据库有哪些全文目录
    sphelpfulltexttables FTArticle -- 查看哪些表把全文索引建立在FTArticle下
    sphelpfulltextcolumns TArticle -- 查看TArticle表哪些字段配置了全文索引


    删除全文索引必须与创建的时候倒过来一步一步操作:

    drop fulltext index on TArticle -- 撤销T-Article上的全文检索

    drop fulltext catalog FTArticle -- 撤销全文目录FTArticle


    存储过程实例:

    Use myDATA--打开数据库 
    GO
    
    --检查pubs是否支持全文检索,若不支持则使用sp_fulltext_database打开此功能 
    if (select databaseProperty('myDATA','isfulltextEnabled'))=0
    	Begin 
    		execute sp_fulltext_database 'enable'
    	end
    --建立全文目录FT_pubs 
    execute sp_fulltext_catalog 'TE_CI_Class_10134','create','E:\MSFTESQL'
    --为title表建立全文索引数据元 
    execute sp_fulltext_table 'TE_CI_Class_10134','create','TE_CI_Class_10134','PK_TE_CI_Class_10134' 
    --设置全文索引列名 
    execute sp_fulltext_column 'TE_CI_Class_10134','CI_SearchKey','add' 
    --execute sp_fulltext_column'TE_CI_Class_10134','CI_CorpName','add' 
    --建立全文索引 
    execute sp_fulltext_table 'TE_CI_Class_10134','activate' 
    --填充全文索引目录 
    execute sp_fulltext_catalog 'TE_CI_Class_10134','start_full' 
    GO 
    
    --检测全文索引目录 
    while FulltextCatalogProperty('PK_TE_CI_Class_10134','PopulateStatus') <> 0 
    	Begin 
    	--若全文索引正处在填充状态,则等待30面后再检测 
    	waitfor delay  '0:0:30' 
    	end
    
    --设置自动跟踪更新
    ALTER FULLTEXT INDEX ON TE_CI_ChargeLevel_6 SET CHANGE_TRACKING AUTO

    格式文档帮助:

    14.8  2005新增:与全文索引相关的T-SQL语句

    SQL Server 2005以前的版本中,创建与管理全文目录、全文索引主要是使用存储过程来完成。从SQL Server 2005开始新增加了一些与全文索引相关的T-SQL语句,可以用来创建与管理全文目录和全文索引。

    14.8.1  创建全文目录

    创建全文目录的T-SQL语句为:

    CREATE FULLTEXT CATALOG catalog_name

         [ON FILEGROUP filegroup ]

         [IN PATH 'rootpath']

         [WITH <catalog_option>]

         [AS DEFAULT]

         [AUTHORIZATION owner_name ]

    <catalog_option>::=

         ACCENT_SENSITIVITY = {ON|OFF}

    其中参数说明如下:

    l  catalog_name:全文目录名称。

    l  ON FILEGROUP filegroup:包含全文目录的文件组名。

    l  IN PATH 'rootpath':全文目录的路径。

    l  AS DEFAULT:指定该全文目录为默认目录。

    l  AUTHORIZATION owner_name:将全文目录的所有者设为数据库用户名或角色的名称。

    l  ACCENT_SENSITIVITY:设置该全文目录的全文索引是否区分重音。

    例十三、在Northwind数据库中创建一个名为“TSQL全文目录全文目录,其代码如下:

    CREATE FULLTEXT CATALOG TSQL全文目录

             ON FILEGROUP [PRIMARY]

             IN PATH 'E:"book"SQL Server 2005大全"数据库"第十四章"运行后数据库'

             AS DEFAULT

    14.8.2  更改全文目录属性

    创建完全文目录之后,如果发现其设置有不如意之处,可以用T-SQL语句对其进行修改。更改全文目录属性的T-SQL语句代码如下:

    ALTER FULLTEXT CATALOG catalog_name

    { REBUILD [ WITH ACCENT_SENSITIVITY = { ON | OFF } ]

    | REORGANIZE

    | AS DEFAULT

    }

    其中参数说明如下:

    l  catalog_name:全文目录名称

    l  REBUILD:重新生成全文目录。

    l  WITH ACCENT_SENSITIVITY:设置该全文目录的全文索引是否区分重音。

    l  REORGANIZE:执行主合并索引以便将在索引过程中创建的各个较小的索引合并成一个大索引。

    l  AS DEFAULT:指定该全文目录为默认目录。

    例十四、重新生成“TSQL全文目录,其代码如下:

    ALTER FULLTEXT CATALOG TSQL全文目录

             REBUILD

    14.8.3  创建全文索引

    有了全文目录后,可以在全文目录里创建全文索引。一个全文目录里可以包含多个全文索引,但一个全文索引只能属于一个全文目录。每个数据表只能有一个全文索引。创建全文索引的T-SQL语句代码如下:

    CREATE FULLTEXT INDEX ON table_name

         [(column_name [TYPE COLUMN type_column_name]

              [LANGUAGE language_term] [,...n])]

         KEY INDEX index_name

              [ON fulltext_catalog_name]

         [WITH

              {CHANGE_TRACKING {MANUAL | AUTO | OFF [, NO POPULATION]}}

         ]

    其中参数说明如下:

    l  table_name:数据表名。

    l  column_name:全文索引中包括的一列或多列的名称。只能对类型为charvarcharncharnvarchartextntextimagexmlvarbinary的列进行全文索引。

    l  TYPE COLUMN type_column_name:用于存储column_name的文档类型的数据表中的列名。

    l  LANGUAGE language_term:存储在column_name中的数据所用的语言。

    l  KEY INDEX index_name:数据表中唯一键索引的字段名。

    l  ON fulltext_catalog_name:全文目录名。

    l  MANUAL:指定是使用SQL Server代理还是手动传播跟踪日志。

    l  AUTO:当关联的数据表中修改了数据时,SQL Server自动更新全文索引。

    l  OFF[,NO POPULATION]:不保留对索引数据的更改列表。

    例十五、为文章表的标题内容文件三个字段创建全文索引,其代码如下:

    CREATE FULLTEXT INDEX

             ON 文章(标题,内容,文件 TYPE COLUMN 扩展名)

             KEY INDEX PK_文章

             ON TSQL全文目录

    注意:由于在前面的章节里已经为文章表创建了全文索引,因此在运行本例之前要先把原来创建的全文索引删除。

    14.8.4  更改全文索引属性

    创建完全文索引之后,如果发现其设置有不如意之处,可以用T-SQL语句对其进行修改。更改全文索引属性的T-SQL语句代码如下:

    ALTER FULLTEXT INDEX ON table_name

       { ENABLE

       | DISABLE

       | SET CHANGE_TRACKING { MANUAL | AUTO | OFF }

       | ADD ( column_name

         [ TYPE COLUMN type_column_name ]

         [ LANGUAGE language_term ] [,...n] )

         [ WITH NO POPULATION ]

       | DROP ( column_name [,...n] )

         [WITH NO POPULATION ]

       | START { FULL | INCREMENTAL | UPDATE } POPULATION

       | STOP POPULATION

       }

    其中一些参数说明如下:

    l  table_name:数据表名。

    l  ENABLE | DISABLE:启用或禁用全文索引。

    l  MANUAL:指定是使用SQL Server代理还是手动传播跟踪日志。

    l  AUTO:当关联的数据表中修改了数据时,SQL Server自动更新全文索引。

    l  OFF:不保留对索引数据的更改列表。

    l  ADD:指定在全文索引中添加列。

    l  WITH NO POPULATION:指定添加过删除全文索引列之后不填充全文索引。

    l  DROP:指定在全文索引中删除列。

    l  START……POPULATION:开始填充全文索引。

    l  FULL:指定填充所有全文索引。

    l  INCREMENTAL:指定对上次填充以来修改过的行进行填充。

    l  UPDATE :指定对自上次更新更改跟踪索引以来的所有插入、更新或删除进行处理。

    l  STOP POPULATION:停止正在进行的填充。

    例十六、禁用文章表的全文索引,其代码如下:

    ALTER FULLTEXT INDEX ON 文章

             DISABLE

    例十七、启用文章表的全文索引,其代码如下:

    ALTER FULLTEXT INDEX ON 文章

             ENABLE

    例十八、将文章表里的文件字段从全文索引里删除,其代码如下:

    ALTER FULLTEXT INDEX ON 文章

             DROP (文件)

    例十九、填充文章表的全文索引,其代码如下:

    ALTER FULLTEXT INDEX ON 文章

             START FULL POPULATION

    14.8.5  删除全文索引

    删除全文索引的T-SQL的语法代码比较简单,如下所示:

    DROP FULLTEXT INDEX ON table_name

    例二十、删除文章表里的全文索引,其代码如下:

    DROP FULLTEXT INDEX ON 文章

    14.8.6  删除全文目录

    删除全文目录的T-SQL的语法代码比较简单,如下所示:

    DROP FULLTEXT CATALOG catalog_name

    例二十一、删除文章表里的全文索引,其代码如下:

    DROP FULLTEXT CATALOG TSQL全文目录

    注意:要删除全文目录必须为空,即不能包含有全文索引。

    14.9  小结

    使用全文搜索可以快速、灵活地为存储在数据库中的文本数据的基于关键字的查询创建索引。与仅适用于字符模式的LIKE谓词不同,全文查询将根据特定语言的规则对词和短语进行操作,从而针对此数据执行语言搜索。

    全文索引是由SQL Server FullText Search服务来维护的,必须选启动该服务才能使用全文索引。填充全文索引有三种方式:完全填充、增量填充和更改跟踪。

    在全文索引中概念与术语比较多,如全文索引、全文目录、断字符、词干分析器、标记、筛选器、填充、干扰词等。了解怎么创建全文目录,怎么创建全文索引,怎么进行全文索引的填充,怎么使用调度让全文索引自动填充。

    使用CONTAINSFREETEXT两个谓词和CONTAINSTABLEFREETEXTTABLE两个行集值函数可以用来进行全文搜索,其中CONTAINSFREETEXT用在WHERE子句中,CONTAINSTABLEFREETEXTTABLE用在FROM子句中。CONTAINS搜索有简单词、派生词、前缀词、加权词和邻近词五种搜索方式。FREETEXT只有一种搜索方式,但是其将一个句子中的每个单字拆分开进行搜索。

    SQL Server 2005可以对存储在image类型字段里的文件进行全文搜索。其搜索的前提是必须要有一个字段指明image类型字段里存储的文件是什么类型。当为image类型字段设置好全文索引后,可以像其他字段一样地进行全文搜索。


    展开全文
  • 9、创建索引(CREATE INDEX)

    千次阅读 2020-10-16 09:58:46
    可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。 语法格式: CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC]) 语法说明如下...

    创建索引是指在某个表的一列或多列上建立一个索引,可以提高对表的访问速度。创建索引对 MySQL 数据库的高效运行来说是很重要的。
    基本语法

    MySQL 提供了三种创建索引的方法:

    1) 使用 CREATE INDEX 语句

    可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的表上创建索引,但该语句不能创建主键。

    语法格式:

    CREATE <索引名> ON <表名> (<列名> [<长度>] [ ASC | DESC])
    

    语法说明如下:

    • <索引名>:指定索引名。一个表可以创建多个索引,但每个索引在该表中的名称是唯一的。
    • <表名>:指定要创建索引的表名。
    • <列名>:指定要创建索引的列名。通常可以考虑将查询语句中在 JOIN 子句和 WHERE 子句里经常出现的列作为索引列。
    • <长度>:可选项。指定使用列前的 length个字符来创建索引。使用列的一部分创建索引有利于减小索引文件的大小,节省索引列所占的空间。在某些情况下,只能对列的前缀进行索引。索引列的长度有一个最大上限255 个字节(MyISAM 和 InnoDB 表的最大上限为 1000个字节),如果索引列的长度超过了这个上限,就只能用列的前缀进行索引。另外,BLOB 或 TEXT 类型的列也必须使用前缀索引。
    • ASC|DESC:可选项。ASC指定索引按照升序来排列,DESC指定索引按照降序来排列,默认为ASC。

    2) 使用 CREATE TABLE 语句

    索引也可以在创建表(CREATE TABLE)的同时创建。在 CREATE TABLE 语句中添加以下语句。语法格式:

    CONSTRAINT PRIMARY KEY [索引类型] (<列名>,)
    

    在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的主键

    语法格式:

    KEY | INDEX [<索引名>] [<索引类型>] (<列名>,)
    

    在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的索引。

    语法格式:

    UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,)
    

    在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的唯一性索引

    语法格式:

    FOREIGN KEY <索引名> <列名>
    

    在 CREATE TABLE 语句中添加此语句,表示在创建新表的同时创建该表的外键。

    在使用 CREATE TABLE 语句定义列选项的时候,可以通过直接在某个列定义后面添加 PRIMARY KEY 的方式创建主键。而当主键是由多个列组成的多列索引时,则不能使用这种方法,只能用在语句的最后加上一个 PRIMARY KRY(<列名>,…) 子句的方式来实现。

    3) 使用 ALTER TABLE 语句

    CREATE INDEX 语句可以在一个已有的表上创建索引,ALTER TABLE 语句也可以在一个已有的表上创建索引。在使用 ALTER TABLE 语句修改表的同时,可以向已有的表添加索引。具体的做法是在 ALTER TABLE 语句中添加以下语法成分的某一项或几项。

    语法格式:

    ADD INDEX [<索引名>] [<索引类型>] (<列名>,)
    

    在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加索引。

    语法格式:

    ADD PRIMARY KEY [<索引类型>] (<列名>,)
    

    在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加主键。

    语法格式:

    ADD UNIQUE [ INDEX | KEY] [<索引名>] [<索引类型>] (<列名>,)
    

    在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加唯一性索引。

    语法格式:

    ADD FOREIGN KEY [<索引名>] (<列名>,)
    

    在 ALTER TABLE 语句中添加此语法成分,表示在修改表的同时为该表添加外键。

    创建普通索引

    创建普通索引时,通常使用 INDEX 关键字。
    例 1
    创建一个表 tb_stu_info,在该表的 height 字段创建普通索引。输入的 SQL 语句和执行过程如下所示。

    mysql> CREATE TABLE tb_stu_info
        -> (
        -> id INT NOT NULL,
        -> name CHAR(45) DEFAULT NULL,
        -> dept_id INT DEFAULT NULL,
        -> age INT DEFAULT NULL,
        -> height INT DEFAULT NULL,
        -> INDEX(height)
        -> );
    
    mysql> SHOW CREATE TABLE tb_stu_info\G
    *************************** 1. row ***************************
           Table: tb_stu_info
    Create Table: CREATE TABLE `tb_stu_info` (
      `id` int(11) NOT NULL,
      `name` char(45) DEFAULT NULL,
      `dept_id` int(11) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `height` int(11) DEFAULT NULL,
      KEY `height` (`height`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
    

    创建唯一索引

    创建唯一索引,通常使用 UNIQUE 参数。

    例 2
    创建一个表 tb_stu_info2,在该表的 id 字段上使用 UNIQUE 关键字创建唯一索引。输入的 SQL 语句和执行过程如下所示。

    mysql> CREATE TABLE tb_stu_info2
        -> (
        -> id INT NOT NULL,
        -> name CHAR(45) DEFAULT NULL,
        -> dept_id INT DEFAULT NULL,
        -> age INT DEFAULT NULL,
        -> height INT DEFAULT NULL,
        -> UNIQUE INDEX(height)
        -> );
    
    mysql> SHOW CREATE TABLE tb_stu_info2\G
    *************************** 1. row ***************************
           Table: tb_stu_info2
    Create Table: CREATE TABLE `tb_stu_info2` (
      `id` int(11) NOT NULL,
      `name` char(45) DEFAULT NULL,
      `dept_id` int(11) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `height` int(11) DEFAULT NULL,
      UNIQUE KEY `height` (`height`)
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
    
    展开全文
  • 创建索引原则及SQL添加索引

    万次阅读 2018-08-14 10:40:07
    检查自己的sql语句,为那些频繁在where子句中出现的字段建立索引。  3.尝试建立复合索引来进一步提高系统性能。修改复合索引将消耗更长时间,同时,复合索引也占磁盘空间。  4.对于小型的表,建立索引可能会影响...
  • 创建表的时候创建索引

    万次阅读 2012-09-27 10:10:14
    创建索引有3种方式,这3种方式分别是创建表的时候创建索引、在已经存在的表上创建索引和使用ALTER TABLE语句创建索引。本节将详细讲解这3种创建索引的方法。   7.2.1 创建表的时候创建索引(1)   创建表时...
  • 索引的理解: 索引是对数据库表中的一列或多列的值进行排序的一种数据结构。 索引的作用就类似于书本的目录,新华字典的拼音,偏旁部首的首查字,可以快速的检索到需要 的内容,mysql在300万条记录性能就下降了,...
  • SQL创建索引

    千次阅读 2012-07-10 16:53:29
    为给定表或视图创建索引。 只有表或视图的所有者才能为表创建索引。表或视图的所有者可以随时创建索引,无论表中是否有数据。可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。 语法 CREATE ...
  • SQL CREATE INDEX 语句CREATE INDEX 语句用于在表中创建索引。在读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。索引您可以在表中创建索引,以便更加快速高效地查询数据。用户无法看到索引,它们...
  • SQL 创建索引,语法

    千次阅读 2014-06-07 16:10:16
    SQL SERVER将主键默认定义为聚集索引,事实上,索引是否唯一与是否聚集是相关的,聚集索引可以是唯一索引,也可以是非唯一索引; 唯一索引实际上就是要求指定的列中所有的数据必须不同 /* 主键一唯一索引的区别...
  • MySQL索引创建与使用

    万次阅读 多人点赞 2018-08-06 18:49:59
    声明:本人主要简单示例MySQL中的单列索引、组合索引创建与使用。 索引创建: 建表时创建: CREATE TABLE 表名( 字段名 数据类型 [完整性约束条件], ……, [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY ...
  • 一、可以创建多个索引嘛? 可以创建多个索引的。 需要开发人员根据实际的用途以及数据库中记录的情况,来进行判断。 通常来说,表的索引越多,其查询的速度也就越快。但是,表的insert/update速度则会降低。这主要是...
  • 如何在SQL创建索引

    千次阅读 2019-10-30 19:34:56
    我们通过一个简单的例子来开始教程,解释为什么我们需要数据库索引。假设我们有一个数据库表 Employee, 这个表有三个字段(列)分别是 Employee_Name、Employee_...我们决定使用下面的查询语句: SELECT * FROM E...
  • 提高sql语句执行效率及索引

    千次阅读 2015-09-23 15:16:54
    与表独立存放,但不能独立存在,必须属于某个表 由数据库自动维护,表被删除时,该表上的索引自动被删除。   索引创建: 自动: 当在表上定义一个PRIMARY KEY 或者UNIQUE 约束条件时, 数据库自动创建一个对应的索引...
  • 索引的概念和创建索引例子

    千次阅读 2017-06-29 15:36:57
    1 索引的概念 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。表的存储由两部分组成,一部分用来...所以建立合理的索引,就加速数
  • 物化视图可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果,这样,在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。物化视图有很多方面和索引很相似:使用物化视图的目的是为了提高...
  • SqlServer在视图上创建索引

    千次阅读 2015-03-22 10:47:36
    在视图上创建索引需要三个条件: 一、视图必须绑定到架构。 要做到这点,在 CREATE VIEW 语句中,必须加上 WITH SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,选中“绑定到架构”。...
  • REPLACE INTO语句和唯一索引UNIQUE INDEX

    千次阅读 2020-03-02 11:56:43
    在开发中,我们经常会用到REPLACE INTO语句下面的内容是我在使用过程中的一点笔记。 1. 关于受影响的行数 使用REPLACE INTO语句之后,会显示受影响的行数,会有两种情况,即:1或者大于1。 1.1 受影响的行数为1 ...
  • SQL Server创建语句介绍

    万次阅读 多人点赞 2017-12-13 16:35:26
    SQL Server创建表是最常见也是最常用的操作之一,下面就为您介绍SQL Server创建表的语句写法,供您参考,希望可以让您对SQL Server创建表方面有更深的认识。 USE suntest create table 仓库 ( 仓库编号 int , ...
  • sql2000 为给定表或视图创建索引

    千次阅读 2012-02-12 15:01:44
    Transact-SQL 参考 ...为给定表或视图创建索引。...只有表或视图的所有者...可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。 语法 CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] IND
  • 官网排序优化:http://dev.mysql.com/doc/refman/5.5/en/order-by-optimization.htmlMySql创建索引时支持ASC或DESC排序下面举例创建表时同时创建索引降序排序(sname 字段上普通索引降序)create table tbl1 (id int ...
  •  语句之后,新的操作不能引用该索引,但是当前的操作可以使用该索引,直到操作完成。数据库服务器等到所有当前用户访问完索引之后才删除索引。 清单 6 包含带 ONLINE 语法使用 DROP INDEX 的例子: 清单...
  • SQL语句---创建

    万次阅读 2009-12-21 23:49:00
    如果为基本表的革一列或多个列的组合指定了UNIQUE约束,则系统将为这些列建立唯一索引,从而保证在表中的任意两行记录在指定的列或列组合上不能取同样的值。    注意:  a. UNIQUE 约束唯一标识数据库表...
  • SQL语句---创建表同时添加约束

    千次阅读 2017-10-12 19:12:39
    如果为基本表的革一列或多个列的组合指定了UNIQUE约束,则系统将为这些列建立唯一索引,从而保证在表中的任意两行记录在指定的列或列组合上不能取同样的值。    注意:  a. UNIQUE 约束唯一标识数据库表...
  • 利用写SQL语句创建数据表

    千次阅读 2017-12-27 23:32:43
    看见某程序员在做数据库扩展的时候将自己写的很多SQL语句脚本导入到SQl SERVER中,来迅速生成很多的数据表,感觉到很神奇,因为我之前都是利用数据库工具或者WEB版的PHPMYADMIN来迅速扩展或者修改表的结构,但是这样...
  • 如果懂sql的基本使用的话,先看一下本人的这篇文章,再看本文,或许会好一些。 链接地址:http://blog.csdn.net/qq_35681180/article/details/53612764 数据库的增删查改有两种方式,一种是直接通过db对象...
  • MySQL语句汇总

    千次阅读 2020-02-23 13:48:22
    文章目录MySQL语句汇总第一章:数据库基础知识:一、对数据库的操作二、数据表的基本操作:三、表的约束四、设置表的字段值自动增加第二章:索引1、创建表的时候创建索引1> 创建普通索引2> 创建唯一性索引4>...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,905
精华内容 60,362
关键字:

下面语句不能用于创建索引