一般来说,我总是使用 Ints。我知道理论上这不是最佳实践,因为您应该使用保证存储数据的最小数据类型。
例如,tinyint
当您知道将存储的唯一数据是 1、0 或 null(以后将其扩展为 2 或 3 的可能性很小)时,最好使用。
但是,我知道这样做的唯一原因是出于存储目的——在一行中使用 1 个字节而不是 4 个字节。
除了节省硬盘空间之外,仅使用tinyint
(smallint
甚至bigint
)会产生什么影响int
?
http://en.wikipedia.org/wiki/CAP_theorem
http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf
我想是不是非常简单,为什么只有两个的
可以适用于任何给定的分布式数据库系统。这个猜想被证实,但有没有看出为什么一个简单的方法可能是,这可能持有?
我不是在寻找证明,只是一种理解为什么这个定理可能有意义的好方法。理由是什么?
为什么当我们在列中有一个 NULL 值并且我们按值升序排序时,首先对 NULL 进行排序?
select 1 as test
union all
select 2
union all
select NULL
union all
select 3
union all
select 4
order by test
Run Code Online (Sandbox Code Playgroud)
结果是
NULL
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
我一直认为 NULL 意味着“不确定”或可能的“未知”。如果这是真的,它们会不会排在最后,因为该值可能大于所有其他值?(或者这是某个地方的排序选项?)
我使用的是 SQL Server 2008R2,但我怀疑这适用于所有 SQL Server,并且可能适用于所有 RDBMS。
假设我有一个包含用户信息的大表和另一个包含多个位置的表。然后我使用另一个包含 user_id 和 location_id 的表。
为了检索数据,我必须使用 Left Join 查询。与将所有内容放在一张桌子中相比,这不是使整个过程更长的检索时间吗?例如,我可以将位置作为文本放在同一张桌子上。
编辑:这是一个例子。
CREATE TABLE `user` (
`id` int(11) NOT NULL,
`name` varchar(45) DEFAULT NULL,
`gender` enum('M','F') DEFAULT NULL
);
CREATE TABLE `user_location` (
`user_id` int(11) NOT NULL,
`location_id` int(11) NOT NULL
);
CREATE TABLE `location` (
`id` int(11) NOT NULL,
`location` varchar(45),
`parent_id` varchar(45)
);
Run Code Online (Sandbox Code Playgroud)
注意:请假设所有相关字段都在它们之间正确索引。
编辑:我目前有一个大型数据库,用户通过如上所述的连接表检索他们的位置。我被要求优化数据库,因为搜索结果很慢。我添加了memcache
它并且它有了显着的改进,但现在我只是想知道左连接。
例如,当前查询是这样的:
SELECT * FROM users
LEFT JOIN user_location
ON user_location.user_id = user.id
LEFT JOIN location
ON location.id = user_location.location_id;
Run Code Online (Sandbox Code Playgroud)
这只是为了获取位置。它们还有其他几个通过联结检索的字段,并且都需要它们来查看用户的个人资料。我们的电话号码、地址、密码、出生日期和许多其他信息都在不同的表格中。
为了让我为用户配置文件创建一个页面,我必须向服务器发送一个大型查询。现在在第一次被缓存之后就可以了。但我只是想知道为什么有人会像这样构建他们的数据库?
我有点困惑,因为我在质疑 OLTP 和 OLAP 中“在线”的定义。我曾经认为,这里的“在线”意味着我们希望在有限的时间内根据某个实例的可用数据获得答案。
但是 OLAP 查询可能需要几个小时来计算 - 这不是离线的吗?
快速搜索表明离线 OLAP 听起来相当混乱(离线在线分析处理)......?
究竟什么是“在线”?
terminology transaction olap database-theory online-operations
这个问题有很多讨论:大型搜索引擎使用哪些数据库技术?
这么多的讨论让我感到困惑。那么……什么是数据库?只有关系数据库是“数据库”吗?面向对象的数据库是“数据库”吗?是否有任何允许我存储和检索信息(如地图、列表等)的系统是数据库?
或者数据库是否必须存储/检索信息并且还具有一些管理功能,例如用户和权限?dBase III 是否加上数据库,因为它不是真正的关系型数据库?
有没有办法检查两个 SQL 语句的数学相等性?
我有两个 SQL 语句:
对数据运行这两个语句并比较输出根本没有帮助。
需要评估语句背后的集合数学,就像方程求解器一样。
超出我的问题范围的是:
范围内:
哪些数据库使用真正的多维索引?oracle 是否曾经使用多个索引从表中获取数据,还是总是使用似乎具有最高选择性的索引?其他dbms怎么样?
database-theory ×10
sql-server ×2
terminology ×2
index ×1
mysql ×1
olap ×1
sorting ×1
transaction ×1