在下面执行此查询时,它花费的时间太长。结果是记录太多,数据库中的记录可能更多。查询应返回大约 117.000 条记录。即在半年内进入数据库的记录量。
为什么这个查询成倍增加,导致数百万条记录?如果有人能告诉我我被卡住的地方,我会很高兴。
/* Formatted on 2011/08/05 17:09 (Formatter Plus v4.8.7) */
SELECT t2.flag, t3.reg_number, t1.reportdate, t1.latitude, t1.longitude,
t1.value2 course, ((t1.measspeed) * 3.6) / 1.852, t1.status alarms
FROM traffic t1, details t2, registernumbers t3
WHERE t1.mobileno = t2.mobile
AND t2.mobile = t3.mobileno
AND UPPER (t2.flag) = UPPER ('BEL')
AND t1.reportdate BETWEEN '1/jan/2011' AND '1/jul/2011'
AND (latitude > 52 AND longitude > 2)
AND latitude > 48
OR (latitude < 52 AND longitude > 2)
OR (latitude > 52 AND …Run Code Online (Sandbox Code Playgroud) 我有几天时间处理这个查询,但无法按我的意愿工作。这篇文章与此相关来自不同表的几个值,我在其中艰难找到了解决方案,但我完全错误并丢失了:(。所以基本上与另一篇文章的架构相同:5 个表:default_users、default_profiles、default_status、default_comment和 default_friend。这是每个的 SQL:
default_comment
CREATE TABLE `default_comment` (
`comment_id` int(11) NOT NULL AUTO_INCREMENT,
`friend_id` int(11) NOT NULL,
`message` text COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`status_id` int(11) NOT NULL,
`device` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`comment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=13007 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud)
默认好友
CREATE TABLE `default_friend` (
`friend_id` int(8) NOT NULL,
`user_id` int(8) NOT NULL,
`is_suscriber` tinyint(1) NOT NULL DEFAULT '1',
`privacy` tinyint(1) NOT NULL DEFAULT '0',
`created_at` timestamp NOT …Run Code Online (Sandbox Code Playgroud) 这是我的查询
SELECT *
FROM
(
SELECT a.*, rownum rnum
FROM
(
SELECT id, data
FROM t
ORDER BY id
) a
WHERE rownum <= HIGHER
)
WHERE rnum >= LOWER;
Run Code Online (Sandbox Code Playgroud)
我有大量数据,因此我一次获取其中的一部分,比如第一次尝试从 1 到 100,第二次尝试从 101 到 200,依此类推。
如果我执行上面的查询,它将对每个数据部分执行以下操作:
SELECT id, data
FROM t
ORDER BY id
Run Code Online (Sandbox Code Playgroud)
我认为对每个部分都这样做效率很低。我不能做一些像订购我的数据集并应用 rownum 之类的事情吗?它会有任何用处吗?
例如,如果我们有两个表:表 1 和表 2
表 1 - 主表(所有记录的唯一条目)表 2 - 是一个历史表(其中包含基于时间戳的同一记录的许多条目)(还包含一些特定的字段类型)
我需要检索数据,例如 table1 中的所有数据,其中没有 type = 'Some vaue' 的记录条目
我正在items从数据库中查询并将其显示给用户。(在我的示例中,我将contacts在 table 中使用tContacts。
用户items按他决定的顺序选择几个(用户可以随机选择项目,因此不能指定要订购的列)。
在应用程序中,我items在ordered list.
目前我查询这些对象的更多详细信息one-by-one。
是否可以创建一个带有“有序列表”的查询,它items以相同的顺序返回?
类似于(是的,这很丑 - 可能也达到了最大 sql 查询大小):
SELECT * FROM (
--how to append this list...
SELECT 0 as listIndex, * from tContacts where conIdContact = 13259;
SELECT 1 as listIndex, * from tContacts where conIdContact = 12472;
[...]
SELECT 568 as listIndex, * from tContacts where conIdContact = 12422;
)
ORDER BY listIndex
Run Code Online (Sandbox Code Playgroud)
one-by-one …我确实有一张休闲表:
id name value
1 Daniel 3
2 Daniel 7
3 Daniel 2
4 Carol 9
5 Carol 4
6 Carol 9
7 Ray 5
8 Charles 1
Run Code Online (Sandbox Code Playgroud)
我想在如下表中获取第一个和最后一个值(按 排序id):
name value_1st value_last
Daniel 3 2
Carol 9 9
Ray 5 NULL
Charles 1 NULL
Run Code Online (Sandbox Code Playgroud)
如何编写查询以获取按名称分组并按 id 排序的最后一次和第一次出现的值,像这样?
这个问题让我疯狂了几天,我可能已经找到了答案,但我需要确认并检查最终的简单解决方案。
当存储过程使用一些用户定义的函数时,UDF 计划是合并到主计划中并且一切都得到优化还是每次都直接调用?
假设它没有发生,有没有办法强制 SQL Server 为特定的 SP 执行它?
我有 3 个表如下:
Customer (CustomerName , CustomerCity , CustomerStreet)
Branch (BranchName , BranchCity)
Deposit (CustomerName , BranchName , AccountNumber , Balance)
Run Code Online (Sandbox Code Playgroud)
在这里,我向您展示上表的示例数据:
Customer ('John','City1','Street1')
('Lili','City2','street2')
Branch ('Branch1','Kaj')
('Branch2','Bahar')
('Branch3','Bahar')
('Branch4','Bahar')
Deposit ('John','Branch1',12,1000)
('Lili','Branch1',123,1222)
('Lili','Branch2',124,45233)
('Lili','Branch3',345,6000)
('Lili','Branch4',567,5600)
Run Code Online (Sandbox Code Playgroud)
所以根据上面的信息,我需要一个查询来给我在 Bahar 的所有分行都有存款的 CustomerName 。
我应该在输出中看到“Lili”,因为它在 Bahar 的所有分支都有存款,但我不应该看到 John,因为它只在 Bahar 的一个分支中有存款。
我尽力编写查询,但我不能。你能帮我解决这个问题吗?
我有一个可能以引号开头和结尾的字段。如果字符串以引号开头和结尾,我只想删除引号。如果字符串中存在引号,那么我希望保留它们。
REVERSE如果该字段确实以引号开头和结尾,我已经使用了一些有用的东西,但如果不是,则它只返回空值。
如果字段结果不是以引号开头,我如何确保我仍然获得字段结果?
我拥有的:
REVERSE(STUFF(REVERSE(STUFF(fieldname, CHARINDEX('"', fieldname), LEN('"'), '')), CHARINDEX('"', REVERSE(STUFF(fieldname, CHARINDEX('"', fieldname), LEN('"'), '')), 1), 1, ''))
Run Code Online (Sandbox Code Playgroud) 如何计算所有小数位直到第一个零
例如,我有一个名为 x 的列,其中包含一个数值数据类型值 1.955000000
我想计算没有零的小数位。所以在这里我希望查询输出 3 而不是 9(带零)
query ×10
sql-server ×3
mysql ×2
oracle ×2
performance ×2
t-sql ×2
decimal ×1
mysql-5.5 ×1
optimization ×1
order-by ×1
postgresql ×1