文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>数据库优化

数据库优化

时间:2010-09-14  来源:艾伦

数据库表结构如下:

Id            int primary key  --主键

DeptId   int        --部门id

InvoType   varchar(50)    --部门可开发票类型

现在数据库有数据如下:

id   DeptId    InvoType

1   1         1,2,3

2      2        1,3,5,6,9 

现在我们要取出部门1,部门2都可以开的发票类型,也就是invoTyp=1,3

如果现在这种表结构,我们只能取出一个部门1的发票类型,以逗号分隔,然后依次去部门2中查找, 部门2的invoType中是否包含这个发票类型

具体情况就是,将1,2,3分隔开,然后首先取出1,然后去1,3,5,6,9中遍历,接着取出2,去 1,3,5,6,9遍历,最后取出3,去1,3,5,6,9中遍历

现在只是两个部门,ok,可能对效率的影响不是很明显,如果是十个,或者几十个,想想会是什么情况吧!肯定是很糟糕的,既然设计有了不好的地方,我们就要优化了

经过分析,认为可以拆分现在的数据,拆分后的数据

 id   DeptId    InvoType

1   1           1

2   1        2

3   1        3 

4       2         1

5   2        3

6   2        5

7   2        6 

8   2        9 

 这时候,如果我们要取出两个部门的发票类型的交集,就很简单了,sql语句如下:

select distinct invoType from 表名 where Deptid in(1,2)

查询结果:

1

3

很明显,这样的数据库结构会给查询带来极大的方便,另外,如果需要行转列显示的时候

这样的结果也很方便的

select case invoType when 1 then 发票类型1 else '' end from 表名

其他的类似

如果是第一种结构的话,行转列我还真不知道要怎么搞了 

 

 

 

 

 

 

 

相关阅读 更多 +
排行榜 更多 +
别惹神枪手安卓版

别惹神枪手安卓版

冒险解谜 下载
坦克战争世界

坦克战争世界

模拟经营 下载
丛林反击战

丛林反击战

飞行射击 下载