这些表少于20个字段,属性有大约900万行,而列表有300万行,但这应该不是问题.这是数据库的用途......
listing_ids的类型为Number.到目前为止,我们最好的猜测是因为属性表有600万行,其中的listingids实际上并没有指向列表,Oracle花了很多时间寻找不存在的列表.这甚至有意义吗?
Select count(*)
from listings.rfs_listings listings
join listings.rfs_properties properties
on listings.listing_id= properties.listing_id
where listings.display = 1
and properties.city= 'New York'
and rownum <= 10;
Run Code Online (Sandbox Code Playgroud)
我对查询运行了解释计划并得到以下信息:
PLAN_TABLE_OUTPUT
Plan hash value: 772088252
-------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10 | 4110 | 283 (0)| 00:00:04 |
|* 1 | COUNT STOPKEY | | | | | |
| 2 | NESTED LOOPS | …Run Code Online (Sandbox Code Playgroud) 我有一个 PostgreSQL 字符串数组作为表中的一列。我使用 GIN 方法创建了一个索引。但任何查询都不会使用索引(相反,它们使用过滤器对整个表进行顺序扫描)。我缺少什么?
这是我的迁移:
class CreateDocuments < ActiveRecord::Migration
def up
create_table :documents do |t|
t.string :title
t.string :tags, array: true, default: []
t.timestamps
end
add_index :documents, :tags, using: 'gin'
(1..100000).each do |i|
tags = []
tags << 'even' if (i % 2) == 0
tags << 'odd' if (i % 2) == 1
tags << 'divisible by 3' if (i % 3) == 0
tags << 'divisible by 4' if (i % 4) == 0
tags << 'divisible …Run Code Online (Sandbox Code Playgroud) faults我的MongoDB数据库中有一个集合,每个文档都有这些字段:rack_name,timestamp
为了测试和比较性能,我创建了这两个索引:
rack -> {'rack_name': 1}
和
time -> {'timestamp': 1}
现在我用explain()执行了以下查询:
db.faults.find({
'rack_name': {
$in: [ 'providence1', 'helena2' ]
},
'timestamp': {
$gt: 1501548359000
}
})
.explain('allPlansExecution')
Run Code Online (Sandbox Code Playgroud)
结果如下:
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "quicktester_clone.faults",
"indexFilterSet" : false,
"parsedQuery" : {
"$and" : [
{
"timestamp" : {
"$gt" : 1501548359000.0
}
},
{
"rack_name" : {
"$in" : [
"helena2",
"providence1"
]
}
}
]
},
"winningPlan" : { …Run Code Online (Sandbox Code Playgroud) indexing mongodb database-performance query-performance mongodb-query
从原则上讲,哪个更快:
SELECT FROM t1 INNER JOIN t2 INNER JOIN t3 ON t1.c = t2.c = t3.c
Run Code Online (Sandbox Code Playgroud)
与
SELECT FROM t1 INNER JOIN t2 USING (c) INNER JOIN t3 USING (c)
Run Code Online (Sandbox Code Playgroud) 我在一个列上创建了一个索引,它只有两个可能的值(Y 和 N),两个值的数据类型相同。
假设列名是指标。我写了一个选择语句,例如,
SELECT INDICATOR
FROM TEMP_TABLE
ORDER BY INDICATOR
Run Code Online (Sandbox Code Playgroud)
当我在 SQL developer 中为这个查询使用解释计划时,它使用的是全表扫描而不是索引扫描。
为什么不使用索引表扫描。
我已经设置了一些表并运行了查询。然而,在我的解释中,SQL 结果会出现在正在生成的临时表中(我认为这是因为 GROUP BY)
我添加了一些索引来加快查询速度,但想知道是否有办法停止使用临时表,以及是否有其他方法可以使用索引加快查询速度?
购物车数据
CREATE TABLE `cartdata` (
`IDCartData` INT(11) NOT NULL AUTO_INCREMENT,
`CartOrderref` VARCHAR(25) NOT NULL DEFAULT '',
`UserID` INT(11) NOT NULL DEFAULT '0',
`LastUpdate` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE
CURRENT_TIMESTAMP,
`ManualContactName` VARCHAR(100) NOT NULL DEFAULT '',
`ManualOrderConfirmationEmail` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`IDCartData`),
INDEX `CartOrderref` (`CartOrderref`)
)
Run Code Online (Sandbox Code Playgroud)
购物车分割数据
CREATE TABLE `cartsplitdata` (
`IDCartSupplierData` INT(11) NOT NULL AUTO_INCREMENT,
`IDCartData` INT(11) NOT NULL DEFAULT '0',
`supplierid` INT(11) NOT NULL DEFAULT '0',
`DeliveryDate` DATE NOT …Run Code Online (Sandbox Code Playgroud) 我正在尝试重构一些 SQL 代码,使其更具可读性和可维护性;但是,我不想破坏性能。我试图将 select 语句中的一些列逻辑移至多个函数中,但发现性能大幅下降。我希望大家能帮助我理解为什么;更好的是,如何解决它!
重构后,我的代码大致类似于下面的示例。在重构之前, CASE 语句不是函数调用,而是直接位于 select 子句中的 SUM 函数内。
FUNCTION funcOne(@colA, @colB, @colC, @valX, @valY)
RETURNS INT AS
BEGIN
RETURN CASE
WHEN @colA = @colB
THEN @valX + @valY
WHEN @colC BETWEEN 1 AND 10
THEN @valX
ELSE 0
END
END
FUNCTION funcTwo(@colA, @colB, @colC, @valX, @valY)
RETURNS INT AS
BEGIN
RETURN CASE
WHEN @colA <> @colB
THEN @valX + @valY
WHEN @colC BETWEEN 1 AND 10
THEN @valY
ELSE 0
END
END
SELECT …Run Code Online (Sandbox Code Playgroud) 我一直在 MariaDB 中开发一个具有大型且不断扩展的数据库的数据库。该数据库由 PHP 应用程序访问。
我将数据库字符集和排序规则设置为 utf8mb4 和 utf8mb4_unicode_ci
但并非所有的表都有文本(varchar、text 等)列。有些表只保存关系,因此所有列都是数字类型(int、bigint 等)或日期/时间等,但不是文本类型。
在表中,我只保留数字,我是否需要保留 unicode 多字节字符集/排序规则,或者我可以选择其他内容?
最重要的是这会影响查询性能吗?
准备好的查询结构和性能之间是否存在差异
select *
from employee e
join division d
on e.eid = d.eid
and e.div = d.div
and e.level > 5
and e.startDate > sysdate - interval '60' month
;
Run Code Online (Sandbox Code Playgroud)
和:
select *
from employee e
join division d
on e.eid = d.eid
and e.div = d.div
where
e.level > 5
and e.startDate > sysdate - interval '60' month
;
Run Code Online (Sandbox Code Playgroud) 我想用同一个表生成的值更新我的表.
我的目标是使用像_NS和_WP这样的proftxt搜索所有行,并使用相同的ao,
将它们相加,将值除以ao 的_H,_G,_L-Elements的数量,并将此值添加到_H,_G和_o的那些对象.
对于ao,可能只有_NS和_WP行.比例程应跳过这个ao.
例:
我的数据如下:
an, ao, proftxt, value, year
101 , 1, 'e_NSe', 5, 2006
102 , 1, 'e_Ha', 1, 2006
103 , 1, 'w_NSr', 4, 2006
104 , 2, 'w_NSr', 2, 2006
105 , 2, 'x_H05r', 4, 2006
106 , 2, 'w_Gr', 2, 2006
107 , 2, 'a_WPr', 4, 2006
108 , 3, 'a_WPr', 4, 2006
Run Code Online (Sandbox Code Playgroud)
我的数据应该是这样的:
an, ao, proftxt, value, year
102 , 1, 'e_Ha', 10 2006
103 , 2, 'x_H05r', 7, 2006
103 , …Run Code Online (Sandbox Code Playgroud) sql ×5
indexing ×3
mysql ×3
oracle ×3
sql-server ×2
group-by ×1
inner-join ×1
mariadb ×1
mongodb ×1
performance ×1
php ×1
plsql ×1
postgresql ×1
sql-delete ×1
sql-update ×1
t-sql ×1