SQL分表查询的表查询问题

alfredtofu 2011-11-16 08:25:59
RT,比如一个论坛的数据库系统,里面对主题表进行分表操作,我问题如下:
1.假如我要查询主题包含某些字的主题,那是不是得遍历所有的主题表?
2.如果主题太多了,那么主题表数量也会增加,那么如何保证检索到表的速度?或者说是怎么快速检索到特定的表。
3.使用缓存是怎么一个概念?是在客户端本地进行缓存么?能否举个例子。
4.锁这类机制本身SQL会提供吗(比如oracle/mysql等)?还是说某类库或者包会提供?具体要怎么用。


本人菜鸟,也只学过简单的原理,对实际操作不太懂,望各位赐教。
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
alfredtofu 2011-11-16
  • 打赏
  • 举报
回复
您的意思是这个对表的索引是自己在程序里面实现而不是用数据库是管理?

[Quote=引用 4 楼 orchidcat 的回复:]

引用 2 楼 alfredtofu 的回复:

2.加合适的索引是指?是不是也要用另一个表去维护当前所有表的索引?
3.假如访问量很大,那缓存里面的东西是不是得经常更新?
4.那mysql的呢?

引用 1 楼 orchidcat 的回复:

1.是的
2.加合适的索引。
3.服务器缓存 缓存概念
4.sql server 带锁机制


1、根据使用的需求,建立索引……
[/Quote]
--小F-- 2011-11-16
  • 打赏
  • 举报
回复
2.加合适的索引是指?是不是也要用另一个表去维护当前所有表的索引?
---使用索引优化数据库查询效率
1.不宜创建索引的情形
(1)经常插入,修改和删除的表
(2)数据量比较小的表,因为查询优化器在搜索索引时所花费的时间可能会大于遍历全表的数据所需要的时间

2.适合创建索引的情形
(1)为where子句中出现的列创建索引
(2)创建组合索引
(3)为group by 子句中出现的列创建索引

3.聚集索引的设计原则
(1)该列的数值是唯一的或者很少有重复的记录
(2)经常使用between ...and..按顺序查询的列
(3)定义identity的唯一列.
(4)经常用于对数据进行排序的列.

---无法使用索引的select语句
1.对索引列使用了函数,如:
select * from tb where max(id)=100

2.对索引列使用了'%xx',如:
select * from tb where id like '%1'
需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如
select * from tb where id like '1%'就可以使用索引

3.在where子句中对列进行类型转换(其实也是使用到了函数)

4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;
select * from tb where id='1' and col1='aa'
select id,sum(col1) from tb group by id
select * from tb where id='2' and col2='bb'
则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序

5.在where 子句中使用in关键字的某些句子
当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引
如:
select
*
from
ta
where
id
in
(select id from tb where ....)

--这样可以用到索引
select * from tb where id in('1','2')






3.假如访问量很大,那缓存里面的东西是不是得经常更新?

一般来说不用去管 数据库会自动处理。
Mr_Nice 2011-11-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 alfredtofu 的回复:]

2.加合适的索引是指?是不是也要用另一个表去维护当前所有表的索引?
3.假如访问量很大,那缓存里面的东西是不是得经常更新?
4.那mysql的呢?

引用 1 楼 orchidcat 的回复:

1.是的
2.加合适的索引。
3.服务器缓存 缓存概念
4.sql server 带锁机制
[/Quote]

1、根据使用的需求,建立索引,索引是单独的结构,无需用表来管理。
2、缓存的使用跟命中率相关,大概可以理解为大家是否用了更多的相同数据。
如果命中率高,则无需经常替换,命中率低则会走物理读取(即磁盘上读取)
3、目前大多的数据库肯定都有锁机制的。包括mysql
alfredtofu 2011-11-16
  • 打赏
  • 举报
回复
第四个问题在这里找到mysql的http://xu20cn.blog.51cto.com/274020/72574 大概了解了一下,谢了
alfredtofu 2011-11-16
  • 打赏
  • 举报
回复
2.加合适的索引是指?是不是也要用另一个表去维护当前所有表的索引?
3.假如访问量很大,那缓存里面的东西是不是得经常更新?
4.那mysql的呢?

[Quote=引用 1 楼 orchidcat 的回复:]

1.是的
2.加合适的索引。
3.服务器缓存 缓存概念
4.sql server 带锁机制
[/Quote]
Mr_Nice 2011-11-16
  • 打赏
  • 举报
回复
1.是的
2.加合适的索引。
3.服务器缓存 缓存概念
4.sql server 带锁机制

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧