性别字段建立索引问题

3 篇文章 0 订阅
2 篇文章 0 订阅

性别字段能不能建立索引

之前面试被问到一个问题

什么字段适合建索引,什么字段不适合建索引。

性别字段可以建索引吗?

我回答得不是很好。

性别字段这种重复性很强的字段,不要建立索引。为什么不能呢?

下面建立表测试下。如:我建了个tb_test表,往里面插入了七百多万数据,先给性别建立索引,查询开启 sql运行时间记录。

创建名为tb_index_test  的索引

alter table tb_test add index tb_index_test(genenre)
# 开启时间记录
set profiling = 1;

查询genenre=1 的数据;

select * from tb_test where genenre=1;

删除索引

# 查看tb_test表的索引
show index from tb_test;
# 删除索引
drop index tb_test_index on tb_test;

在次查询genenre=1 的数据

select * from tb_test where genenre=1;

查看以上几个命令的执行时间

show profiles;

结果如下

添加索引后查询 比原来为添加索引还慢

添加索引 的查询耗时为 64.5秒

没有索引的查询耗时为 7.8秒

结论是 重复性较强的字段,不适合添加索引

mark222

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
《信息系统与数据库技术》技术实践 1。系统目标 本系统支持图书订购,图书查询,图书折扣等功能,并具有信息管理,事务处理和决策 支持的系统特点。 2.需求分析 2。1业务需求 网上书店主要有2类角色:客户和店长。各自业务如下: 客户能图书查询、浏览(包括浏览本书信息和相关图书列表),查看个人客户信息. 店员能维护图书基本信息、包括增、删、改等;图书折扣管理;图书信息汇总。 2.2数据处理需求 系统涉及的数据源有图书数据,客户数据,订书数据等表单. 2。3系统功能结构图(如图1) 图1:网上书店系统功能结构图 3.数据库设计 3。1数据库概念设计 系统主要有两个实体:客户和图书,它们通过"订购"活动连接在一起,分析定义各实体 的属性,建立实体联系模型的E-R图如图2所示。 图2:网上书店的E—R 3。2数据库逻辑设计 3。2.1将数据库的概念模式图转化为以下2个模式: 客户(客户编号,姓名,年龄,性别,电话,职业) 图书(图书编号,书名,作者,价格) 3。2.2数据库物理设计 1.下面给出SQL Server下的网上书店数据库物理设计的关系模型设计、完整性约束设计和索引选择。 2. Customer客户表:存储客户基本信息,如图3. "字段名称 "字段说明"类型定义 "属性限定 "索引 "关系(外键) " "Name "客户姓名"Varchar "Not Null " " " " " "(16) " " " " "Sex "性别 "Char (2 "Not Null " " " " " ") ""男"或"女" " " " " " "" " " " "Job "职业 "Char(12)"Not Null " " " "Age "年龄 "Char "Not Null " " " " " "(10) " " " " "Telephone "联系电话"Varchar " " " " " " "(40) " " " " 图3 :Customer客户表 3. Book图书表:存储图书基本情况,如图4。 "字段名称 "字段说明"类型定义 "属性限定 "索引 "关系(外键) " "BookName "书名 "Varchar("Not Null " " " " " "60) " " " " "Author "作者 "Char(20)"Not Null " " " "BookSort "图书类别"Char(8) " " " " "Price "价格 "Numeric(4"Not Null " " " " " ",1) " " " " "Discount "折扣 "Numeric("Not Null " " " " " "2,1) "Default 1" " " 图4:Book图书表 3.2。3数据库关系图(如图5) 图5 3。2.4数据库应用对象设计 充分利用SQL Server所提供的数据库应用对象支持应用程序的开发,在数据库应用程序中使用存储过程 可以简化客户端程序,提供系统运行效率,并且减少网络信息传输量。视图建立在SQL Server服务器端,可以简化客户端程序和提高访问安全性。 视图设计: 1.视图—图书信息汇总及图书信息查询 适用于图书信息查询,其视图的结构如图6。视图的定义语句如下: Public Class Form3 Public mybind As BindingManagerBase Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System。EventArgs) Handles MyBase.Load Me.BookTableAdapter.Fill(Me.购书管理_DataDataSet.Book) mybind = BindingContext(DataSet11, "Book") mybind。Position = 0 mybind。Position = mybind。Position — 1 mybind。Position = mybind.Position + 1 mybind。Position = mybind.Count - 1 SqlDataAdapter1。Fill(DataSet11, "Book") mybind = BindingContext(DataSet11, "Book") DataGrid1.DataSource = DataSet11.Book End Sub Private Sub Button1_Click(ByVal sender As System。Object, ByVal e As System.EventArgs) Handles Button1。Click mybind.Position =
Oracle数据库设计策略及规范 设计策略及规范 1. 目的 定义Oracle数据库设计规范,作为数据库规划、设计、开发以及维护人员的技术参考资料。用以规范和指导相关人员的设计行为。 2. 概述 本文档根据Oracle数据库性能特点,描述对表、视图、存储过程、对象命名等方面的设计规范。 3. 基本策略 3.1 设计策略 分类拆分数据量大的表。 对于经常使用的表(如某些参数表或代码对照表),由于其使用频率很高,要尽量减少表中的记录数量。例如,银行的户主账表原来设计成一张表,虽然可以方便程序的设计与维护,但经过分析发现,由于数据量太大,会影响数据的迅速定位。如果将户主账表分别设计为活期户主账、定期户主账及对公户主账等,则可以大大提高查询效率。 分区策略 在拥有数500行以上的表时,采用分区策略。 索引设计。 对于大的数据库表,合理的索引能够提高整个数据库的操作效率。在索引设计中,索引字段应挑选重复值较少的字段;在对建有复合索引字段进行检索时,应注意按照复合索引字段建立的顺序进行。例如,如果对一个5万多条记录的流水表以日期和流水号为序建立复合索引,由于在该表中日期的重复值接近整个表的记录数,用流水号进行查询所用的时间接近3秒;而如果以流水号为索引字段建立索引进行相同的查询,所用时间不到1秒。因此在大型数据库设计中,只有进行合理的索引字段选择,才能有效提高整个数据库的操作效率。 有时候为了提高性能。减少表的关联,恰当的数据冗余是允许的。 索引对新增,删除,更新的性能影响比较大,对相关的表的索引使用要权衡 为表和索引建立不同的表空间,禁止在系统表空间中放入非核心oracle系统成分的对象, 确保数据表空间和索引表空间位于不同的磁盘磁盘驱动器上。 对于经常发生同时查询或频繁查询的表,最好把他放到不同的磁盘空间上 4. 逻辑设计规范 4.1 范式 如果没有性能上的原因,应该使用关系数据库理论,达到较高的范式,避免数据冗余。 如果在数据量上与性能上无特别要求,考虑到实现的方便性可以有适当的数据冗余,但基本上要达到3NF。 4.2 表设计 对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。如果表按某些字段进行增长,则采用按字段值范围进行范围分区;如果表按某个字段的几个关键值进行分布,则采用列表分区;对于静态表,则采用Hash分区或列表分区;在范围分区中,如果数据按某关键字段均衡分布,则采用子分区的复合分区方法。 每个表均创建类型为Sequence的主键字段。 每个表中需含有如下几个基本字段:一个表的SEQ号,4个创建信息字段,5-8个备用字段,一个删除标记字段,最好还有一个行版本字段 字段名 类型 备注 业务SEQ号 整数型 作为表主键 OBLIGATE1 字符型 备用字段 OBLIGATE2 OBLIGATE3 OBLIGATE4 OBLIGATE5 CREATE_USER_ID VARCHAR 创建用户ID CREATE_DATETIME DATE 创建时间 LAST_UPDATE_USER_ID VARCHAR 更新用户ID LAST_UPDATE_DATETIME TIMESTAMP 更新时间 不要用Identify字段作为表的主键与其它表关联。 4.3 索引设计 常规OLTP应用,创建B-TREE索引,不创建位图索引。 不需要为小型数据表(<5000)创建索引。 给单个表创建的索引不超过5个,特别是海量交易类表。 索引条件查询结果记录,不超总记录的20%。 不要给固定选项的字段创建独立索引。 如只有'男,女'的性别字段;'是,否'的状态字段等,不要创建独立索引,位可以建立复合索引。 对于复合索引索引字段顺序比较关键,把查询频率比较高的字段排在索引组合的最前面。 索引放到独立的表空间,该表空间不需要REDO LOG。 含有外键约束的表的字段,必须有单独索引。如订单明细的表头外键。 5. 对象命名规范 5.1 一般规范 5.1.1 语言 命名使用英文单词,不使用复数。 Oracle数据库设计策略及规范全文共3页,当前为第1页。 英文单词使用同对象本身意义相对或相近的单词。选择最简单或最通用的单词。不能使用毫不相干的单词来命名。 Oracle数据库设计策略及规范全文共3页,当前为第1页。 当一个单词不能表达对象含义时,用词组组合,如果组合太长时,采用简写或缩写,缩写要基本能表达原单词的意义。 当出现对象名重名时,是不同类型对象时,加类型前缀或后缀以示区别。 禁止使用中文或拼音缩写进行命名 5.1.2 大小写 名称一律大写,以方便不同数据库移植,以及避免程序调用问题 5.1.3 单词分隔 命名的各单词之间使用下划线进行分隔。 命名的各单词之间不允许有空格存在 5.1.4 保留字 命名不允许使用SQL保留字。 5.1.5 
《信息系统与数据库技术》技术实践 1.系统目标 本系统支持图书订购,图书查询,图书折扣等功能,并具有信息管理,事务处理和决策 支持的系统特点。 2.需求分析 2.1业务需求 网上书店主要有2类角色:客户和店长。各自业务如下: 客户能图书查询、浏览(包括浏览本书信息和相关图书列表),查看个人客户信息。 店员能维护图书基本信息、包括增、删、改等;图书折扣管理;图书信息汇总。 2.2数据处理需求 系统涉及的数据源有图书数据,客户数据,订书数据等表单。 2.3系统功能结构图(如图1) 图1:网上书店系统功能结构图 3.数据库设计 3.1数据库概念设计 系统主要有两个实体:客户和图书,它们通过"订购"活动连接在一起,分析定义各实体 的属性,建立实体联系模型的E-R图如图2所示。 图2:网上书店的E-R 3.2数据库逻辑设计 3.2.1将数据库的概念模式图转化为以下2个模式: 客户(客户编号,姓名,年龄,性别,电话,职业) 图书(图书编号,书名,作者,价格) 3.2.2数据库物理设计 1.下面给出SQL Server下的网上书店数据库物理设计的关系模型设计、完整性约束设计和索引选择。 2. Customer客户表:存储客户基本信息,如图3。 "字段名称 "字段说明"类型定义 "属性限定 "索引 "关系(外键) " "Name "客户姓名"Varchar "Not Null " " " " " "(16) " " " " "Sex "性别 "Char (2) "Not Null " " " " " " ""男"或"女" " " " " " "" " " " "Job "职业 "Char(12) "Not Null " " " "Age "年龄 "Char (10)"Not Null " " " "Telephone "联系电话"Varchar " " " " " " "(40) " " " " 图3 :Customer客户表 3. Book图书表:存储图书基本情况,如图4。 "字段名称 "字段说明"类型定义 "属性限定 "索引 "关系(外键) " "BookName "书名 "Varchar(6"Not Null " " " " " "0) " " " " "Author "作者 "Char(20) "Not Null " " " "BookSort "图书类别"Char(8) " " " " "Price "价格 "Numeric(4"Not Null " " " " " ",1) " " " " "Discount "折扣 "Numeric(2"Not Null " " " " " ",1) "Default 1" " " 图4:Book图书表 3.2.3数据库关系图(如图5) 图5 3.2.4数据库应用对象设计 充分利用SQL Server所提供的数据库应用对象支持应用程序的开发,在数据库应用程序中使用存储过 程可以简化客户端程序,提供系统运行效率,并且减少网络信息传输量。视图建立在SQ L Server服务器端,可以简化客户端程序和提高访问安全性。 视图设计: 1.视图—图书信息汇总及图书信息查询 适用于图书信息查询,其视图的结构如图6。视图的定义语句如下: Public Class Form3 Public mybind As BindingManagerBase Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BookTableAdapter.Fill(Me.购书管理_DataDataSet.Book) mybind = BindingContext(DataSet11, "Book") mybind.Position = 0 mybind.Position = mybind.Position - 1 mybind.Position = mybind.Position + 1 mybind.Position = mybind.Count - 1 SqlDataAdapter1.Fill(DataSet11, "Book") mybind = BindingContext(DataSet11, "Book") DataGrid1.DataSource = DataSet11.Book End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click mybind.Position = 0 DataGrid1

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值