精华内容
下载资源
问答
  • 1. 在oracle8以上的版本中,可以使用以下语句进行索引名称和创建索引语句的查询。 SELECT INDEX_NAME,DBMS_METADATA.get_ddl('INDEX',INDEX_NAME,TABLE_OWNER) INDEX_DDL FROM user_indexes WHERE table_name...
    1. 在oracle8以上的版本中,可以使用以下语句进行索引名称和创建索引语句的查询。

    SELECT INDEX_NAME,DBMS_METADATA.get_ddl('INDEX',INDEX_NAME,TABLE_OWNER) INDEX_DDL
    FROM user_indexes
    WHERE table_name like 'KJ_%'; --‘KJ_%’表示一组以KJ开头的表,可以根据
    --具体情况更改为相应表名,表明字母区分大小写
    查询结果如下
    [img]http://dl.iteye.com/upload/attachment/356877/91a1b3ad-1eb6-37c9-82fa-68f55cf75bcb.jpg[/img]
    --在此图片中,blog大字段里面是创建该索引的语句。

    2. 在oracle10G版本中,可以使用user_ind_columns 去查询数据库的表名、索引名、索引创建所在字段等信息。
    select * from user_ind_columns t
    where t.table_name like 'KJ_%'; --一组以KJ开头的表,表名区分字母大小写。
    查询结果图片
    [align=left][img]http://dl.iteye.com/upload/attachment/356875/86a3f595-3940-3e77-8b5d-6ee407aa5ead.jpg[/img][/align]
    3. 可以依据user_ind_columns显示字段,去更改查询条件显示相应字段内容,如下:
    select t.table_name,t.index_name,t.column_name from user_ind_columns t
    where t.table_name like 'KJ_%';
    查询结果如下图片所示
    [img]http://dl.iteye.com/upload/attachment/356902/82e4a068-14b2-33c3-a2f9-e673d97c06d8.jpg[/img]
    4. 也可以尝试如下语句查询,可以显示该索引所属数据库用户。
    select * from user_ind_statistics
    展开全文
  • 1.建表规约 **【强制】**表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型...数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MySQL 在 Windows 下不区分大小写,但在

    1.建表规约

    1. **【强制】**表达是与否概念的字段,必须使用is_xxx的方式命名,数据类型是tinyint(1)

      ( 1表示是,0表示否)。

      说明:任何字段如果为非负数,必须是无符号。

      正例:表达逻辑删除的字段名is_deleted,1 表示删除,0 表示未删除。

    2. **【强制】**表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。

      说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。

      正例:aliyun_admin,rdc_config,level3_name 反例:AliyunAdmin,rdcConfig,level_3_name

    3. **【强制】**表名不使用复数名词。

      说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于模型类名也是单数形式,符合表达习惯。

    4. **【强制】**禁用保留字,如desc、range、match、delayed等,请参考MySQL官方保留字。 官方文档链接:https://dev.mysql.com/doc/refman/5.7/en/keywords.html

    5. **【强制】**主键索引名为pk_字段名;唯一索引名为uk_字段名;普通索引名则为idx_字段名。

      说明:pk_ 即primary key;uk_ 即 unique key;idx_ 即index的简称。

    6. **【强制】**小数类型为decimal,禁止使用float和double。

      说明:float和double在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不正确的结果。如果存储的数据范围超过decimal的范围,建议将数据拆成整数和小数分开存储。

    7. **【强制】**如果存储的字符串长度几乎相等,使用char定长字符串类型。

    8. **【强制】**varchar是可变长字符串,不预先分配存储空间,长度不要超过5000,如果存储长度大于此值,定义字段类型为text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。

    9. **【强制】**表必备字段:id

    10. **【强制】**表中每个字段都应当解释该字段的含义

      说明:在建表初期或修改字段后都应当说明字段的意思,以便后期维护方便,如下

      comment_num int(11) DEFAULT ‘0’ COMMENT ‘评论数’

    11. 【推荐】表的命名最好是加上“业务名称_表的作用”。

      正例:alipay_task / force_project / trade_config

    12. 【推荐】库名与应用名称尽量一致。

    13. 【推荐】如果修改字段含义或对字段表示的状态追加时,需要及时更新字段注释。

    14. 【推荐】字段允许适当冗余,以提高查询性能,但必须考虑数据一致。冗余字段应遵循:

      1) 不是频繁修改的字段。

      2) 不是varchar超长字段,更不能是text字段。

      正例:商品类目名称使用频率高,字段长度短,名称基本一成不变,可在相关联的表中冗余存储类目名称,避免关联查询。

    15. 【推荐】单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表。

      说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。

    16. 【参考】合适的字符存储长度,不但节约数据库表空间、节约索引存储,更重要的是提升检索速度。

    2 索引规约

    1. **【强制】**业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。

      说明:不要以为唯一索引影响了insert速度,这个速度损耗可以忽略,但提高查找速度是明显的;另外,即使在应用层做了非常完善的校验控制,只要没有唯一索引,根据墨菲定律,必然有脏数据产生。

    2. **【强制】**超过三个表禁止join。需要join的字段,数据类型必须绝对一致;多表关联查询时,保证被关联的字段需要有索引。

      说明:即使双表join也要注意表索引、SQL性能。

    3. **【强制】**在varchar字段上建立索引时,必须指定索引长度,没必要对全字段建立索引,根据实际文本区分度决定索引长度即可。

      说明:索引的长度与区分度是一对矛盾体,一般对字符串类型数据,长度为20的索引,区分度会高达90%以上,可以使用count(distinct left(列名, 索引长度))/count(*)的区分度来确定。

    4. **【强制】**页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

      说明:索引文件具有B-Tree的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

    5. 【推荐】如果有order by的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能。

      正例:where a=? and b=? order by c; 索引:a_b_c

      反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引 a_b无法排序。

    6. 【推荐】利用覆盖索引来进行查询操作,避免回表。

      说明:如果一本书需要知道第11章是什么标题,会翻开第11章对应的那一页吗?目录浏览一下就好,这个目录就是起到覆盖索引的作用。

      正例:能够建立索引的种类:主键索引、唯一索引、普通索引,而覆盖索引是一种查询的一种效果,用explain的结果,extra列会出现:using index。

    7. 【推荐】利用延迟关联或者子查询优化超多分页场景。

      说明:MySQL并不是跳过offset行,而是取offset+N行,然后返回放弃前offset行,返回 N行,那当offset特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行SQL改写。

      正例:先快速定位需要获取的id段,然后再关联:

    ​ SELECT a.* FROM 表1 a, (select id from 表1 where 条件 LIMIT 100000,20 ) b where a.id=b.id

    1. 【推荐】 SQL性能优化的目标:至少要达到 range 级别,要求是ref级别,如果可以是consts 最好。说明:

      1) consts 单表中最多只有一个匹配行(主键或者唯一索引),在优化阶段即可读取到数据。

      2) ref 指的是使用普通的索引(normal index)。

      3) range 对索引进行范围检索。

      反例:explain表的结果,type=index,索引物理文件全扫描,速度非常慢,这个index级别比较range还低,与全表扫描是小巫见大巫。

    2. 【推荐】建组合索引的时候,区分度最高的在最左边。

      正例:如果where a=? and b=? ,a列的几乎接近于唯一值,那么只需要单建idx_a索引即可。

      说明:存在非等号和等号混合判断条件时,在建索引时,请把等号条件的列前置。如:where a>?

      and b=? 那么即使a的区分度更高,也必须把b放在索引的最前列。

    3. 【推荐】防止因字段类型不同造成的隐式转换,导致索引失效。

    4. 【参考】创建索引时避免有如下极端误解:

      1) 宁滥勿缺。认为一个查询就需要建一个索引。

      2) 宁缺勿滥。认为索引会消耗空间、严重拖慢更新和新增速度。

      3) 抵制惟一索引。认为业务的惟一性一律需要在应用层通过“先查后插”方式解决。

    ​ 参考阿里开发规范

    展开全文
  • 视图本质就是对查询的封装,定义视图,建议以v_开头 格式:create view 视图名称 as select语句; 例:创建视图,查询学生对应的成绩信息 create view v_stu_score_course as select stu.*,cs.courseNo,cs.name ...

    视图:
    视图本质就是对查询的封装,定义视图,建议以v_开头
    格式:create view 视图名称 as select语句;

    例:创建视图,查询学生对应的成绩信息

    create view v_stu_score_course as
    select
    stu.*,cs.courseNo,cs.name courseName,sc.score
    from
    students stu
    inner join scores sc on stu.studentNo = sc.studentNo
    inner join courses cs on cs.courseNo = sc.courseNo
    

    查看视图:查看表会将所有的视图也列出来
    show tables;

    删除视图
    drop view 视图名称;
    例:
    drop view v_stu_score_course;

    使用:视图的用途就是查询
    select * from v_stu_score_course;

    索引:
    primary key
    unique
    key (字段名)

    查看索引:
    – show index from 表名;

    创建索引:
    方式一:建表时创建索引

    create table create_index(
    id int primary key,
    name varchar(10) unique,
    age int,
    key (age)
    );
    

    方式二:对于已经存在的表,添加索引
    如果指定字段是字符串,需要指定长度,建议长度与定义字段时的长度一致
    字段类型如果不是字符串,可以不填写长度部分
    create index 索引名称 on 表名(字段名称(长度))
    例:
    create index age_index on create_index(age);
    create index name_index on create_index(name(10));

    删除索引:
    drop index 索引名称 on 表名;

    展开全文
  • --数据库编程2. --存储过程 exec  --执行速度快:存储过程是编译之后的语句,保存在数据库的内容;存储过程的操作只有一次。 ...存放在master数据库中,都以“sp_”或“xp_”开头 ...--修改数据库名称

    --数据库编程2.


    --存储过程  exec
      --执行速度快:存储过程是编译之后的语句,保存在数据库的内容;存储过程的操作只有一次。

    --系统存储过程 存放在master数据库中,都以“sp_”或“xp_”开头



    exec sp_databases
    exec sp_renamedb 'studentmanager','sm' --修改数据库的名称
    exec sp_columns a --查看表a 列的信息
    use sm
    exec sp_tables table_stu8
    --用户自定义存储过程
    --无参数的定义存储过程
    --仅有输入参数的存储过程
    create proc proc_add
    @num1 int, --不加output 说明是输入函数
    @num2 int
    as
    declare @num int 
    set @sum=@num1+@num2
    print @sum
    go


    exec proc_add 6,2


     if exists(select *from sysobjects where name='proc_score2')
    drop proc_score2
    go


    create proc proc_score2
    as


    declare @avgWritten float
    declare @avgLab float
    select @avgWritten=avg(writtenExam) from stuMarks
    select @avgLab=avg(labExam) from stuMarks
    print '笔试平均分:'+convert(varchar(20),@avgWritten)
    print '机试平均分:'+convert(varchar(20),@avgLab)
    if @avgWritten>=70 and @avgLab>=70
    begin
    print '成绩情况:优秀'
    end
    else
    begin
    print '成绩情况:不优秀'
    end
    select *from stuMarks where writtenExam<60 or labExam<60

    go


      --调用存储过程
    exec proc_score2
      --可以指定默认值
    select *from sysobjects
    drop proc proc_score2


    --既有输入参数又有输出参数
    create proc proc_score3
    @www float=60,
    @qqq float=60,
    @num int output,
    @score float output
    as


    declare @avgWritten float
    declare @avgLab float
    select @avgWritten=avg(writtenExam) from stuMarks
    select @avgLab=avg(labExam) from stuMarks
    print '笔试平均分:'+convert(varchar(20),@avgWritten)
    print '机试平均分:'+convert(varchar(20),@avgLab)
    if @avgWritten>=70 and @avgLab>=70
    begin
    print '成绩情况:优秀'
    end
    else
    begin
    print '成绩情况:不优秀'
    end
    select *from stuMarks where writtenExam<@www or labExam<@qqq

    select @num=count(*) from stuMarks where writtenExam<@www or labExam<@qqq
    select @score=count(*) from stuMarks where writtenExam<@www or labExam<@qqq
    go
    --调用
    declare @peoplenum int
    declare @pscore int
    exec proc_score3 60,60,@peoplenum output,@pscore output 
    print @peoplenum
    ---------------------案例
    --0901班/0902班/0903班 写一个存储过程  截取数据
    create proc proc_split
    @str varchar(100),
    @head varchar(20) output,
    @tail varchar(100) output
    as
    --查找/的位置
    declare @position int 
    set @position=charindex('/',@str)
    if @position=0
    begin
    --说明传入的只有一个班级
    set @head=@str
    set @tail=null
    end
    else
    begin
    --说明至少有两个班级
    set @head=substring(@str,1,@position-1)
    set @tail=substring(@str,@position+1,len(@str)-@position)
    end
    go
    --调用
    declare @head varchar(20)
    declare @tail varchar(100)
    exec proc_split '0901班/0902班/0903班',@head output,@tail output
    print @head
    print @tail


    declare @head2 varchar(20)
    declare @tail2 varchar(100)
    declare @str1 varchar(100)
    set @str1= '0901班/0902班/0903班/01班/02班/03班'
    while @str1 is not null 
    begin
    exec proc_split @str1,@head2 output,@tail2 output
    print @head2
    set @str1=@tail2
    end



    --视图 只能针对于查询语句来写  试图在做查询跟表是一样的 视图是一张虚表 并不存储数据 数据来自于真实的表
    -- 不能做增删改  只能做查询
    use sm
    create view view_show --创建视图
    as
    select *from table_student
    go
    --使用
    select *from view_show

    --临时表 一旦关闭 则不存在 断开数据库连接时,临时表自动删除
    create table #aa
    (
    id int primary key,
    name varchar(20) not null
    )




    --索引   可以提高查询速度  但是减慢了增删的速度   类似于书籍中的目录 

    --唯一索引
    --主键索引
    --聚集索引
    --非聚集索引
      --加索引的原则
    1.建立索引依据 (非聚集索引)
    where age>15    order by createtime desc
    2.建立聚集索引(只能有一个),一般选取唯一的额列,列的大小长度尽量小





       --创建索引
      create clustered index index_lname 
    on A(lname) --在表A的lname列上建立索引


    --使用索引
      select *from A with(index=index_lname)
    where lname='sasas'

    展开全文
  • 视图 将内关联或自关联的表创建成另一个表 (select * from students as a inner join classes as b on a.cls_id=b.id) ...定义视图,建议以v_开头 >create view 视图名称 as select语句; 查看视图...
  • 本文实例讲述了Mysql数据库高级用法之视图、事务、索引、自连接、用户管理。分享给大家供大家参考,具体如下: 视图 视图是对若干张基本表的引用,一张虚表,只查询语句执行结果的字段类型和约束,不存储具体的数据...
  • 数据库开发规范

    2021-04-07 12:24:45
    (name)字段单列索引名称:idx_name, (name)字段唯一索引名称:unq_name, (name、home)字段联合索引名称:idx_name_home(name,home) (name、home)字段联合索引名称:unq_name_home(name,home) 3、所有数据表...
  • 视图 视图是对若干张基本表的引用,一张虚表,只查询语句执行结果的字段类型和约束...create view 视图名称(一般以v_开头) as 查询语句; 2.————查看视图: select * from 视图名称; 3.————删除视图: d...
  • 本文实例讲述了Mysql数据库高级用法之视图、事务、索引、自连接、用户管理。分享给大家供大家参考,具体如下:视图视图是对若干张基本表的引用,一张虚表,只查询语句执行结果的字段类型和约束,不存储具体的数据...
  • 数据库命名规范

    2018-04-14 18:29:20
    2.所有数据库对象名称必须小写3.命名要做到见名知意,禁止使用mysql保留关键字。4.临时表以tmp_开头,备份表以bak_开头并以时间戳结尾5.所有存储相同数据的列名和列类型必须一致。6.mysql5.5之前myisam是默认的存储...
  • 本篇文章给大家详细分类总结了数据库相关规范,从库表命名设计规范讲起,到索引设计规范,后面又给出SQL编写方面的建议。相信这些规范适用于大多数公司,也希望大家都能按照规范来使用我们的数据库,这样我们的...
  • Oracle数据库设计规范

    2020-12-11 17:59:49
    Oracle数据库设计规范一、命名规范二、建表规范三、索引规范四、SQL开发规范 一、命名规范 【强制】不允许使用数据库关键字和保留字,为了避免不必要的冲突和麻烦。Oracle的关键字、保留字,详情见《关于Oracle...
  • 一、建表规约1、表达是与否概念的字段,必须使用 is...数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。3、表名不使用复数名词。4、主键索引名为 pk_字段名; 唯一索引名为 uk_字段名;...
  • MySQL数据库规约

    2017-08-30 12:25:36
    一、建表规约 1、表达是与否概念的字段,必须使用 is_xxx 的方式命名,...数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。   3、表名不使用复数名词。   4、主键索引名为 pk_字段
  • 通常说的索引有两种词性,名称和动词。 动词索引indexing,索引一个文档,表示把一个文档存储到索引Index里,可以用来查询和检索,es采用倒排索引 名词索引index,简单的理解成关系型数据库中的数据库的概念 ...
  • MSSQL数据库规范参考

    2018-09-14 10:04:00
    一.数据库对象范围限定 1.表 2.约束[主键/外键] 3.索引 4.标量函数 5.存储过程 ...2.命名中的英文单词以大写首字母开头,主体部分为连续的英文单词,如果英文名称过长,可以使用英文简称. 三.表 1.命名 ...
  • MySQL数据库设计规范

    2016-11-27 20:45:38
    命名规范 表名字段名均使用小写字母,单词间以下划线分割。...普通索引名称以 idx_ 开头,唯一索引以 uk_ 开头。 外键尽量以被引用表名称加 _id 组成。 基础规范 统一使用 INNODB 存储引擎,除非某些特...
  • 文章目录1.建表1.建表规约2 索引规约 1.建表 1.建表规约 【强制】表达是与否概念的字段,必须使用is_xxx的方式命名...数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MySQL 在 W
  •  table_name:是新表的名称。表名最多可包含 128 个字符  column_name:是表中的列名。列名必须符合标识符规则,并且在表内唯一。 datatype:是表中的列的数据类型。要求支持以下两类:数字(float)和字符串(char...
  • 索引是存放在模式(schema)中的一个数据库对象,索引的作用就是提高对表的检索查询速度, 索引是通过快速访问的方法来进行快速定位数据,从而减少了对磁盘的读写操作。 索引数据库的一个对象,它不能独立存在,...
  • 在PowerDesigner中,对SQL Server 2000进行数据库反向(Database -> Reverse Engineer Database)时,会反向出一些名称以“_WA_Sys”开头索引,但这些索引并不是我们做数据库设计的时加的,如何去掉这些不必要的...

空空如也

空空如也

1 2 3 4 5 6
收藏数 105
精华内容 42
关键字:

数据库索引名称开头