我正在通过一个介绍SQL教科书,并对以下问题感到困惑,我们给出了表和值:
CREATE TABLE LineageTable (
parent INT,
id INT,
genus_name VARCHAR(30),
PRIMARY KEY (id)
);
INSERT INTO LineageTable VALUES
(3, 1, 'FamilyA'),
(2, 4, 'FamilyB'),
(7, 2, 'FamilyC');
Run Code Online (Sandbox Code Playgroud)
我想写一个函数,它将返回一个文本字符串,表示从给定名称到所需根目录的路径
我的尝试:
CREATE FUNCTION LineageTable (input VARCHAR(50))
RETURNS TABLE (input VARCHAR(50))
AS $$
BEGIN
RETURN QUERY
SELECT input
FROM LineageTable1
INNER JOIN LineageTable ON LineageTable.parent = LineageTable.id
WHERE LineageTable1.genus_name = LineageTable1.genus_name;
END $$
Run Code Online (Sandbox Code Playgroud)
但是,我很困惑如何多次遍历此表以正确地将路径串在一起.有任何想法吗?谢谢大家!
给定以下SQL表:
员工(ssn,姓名,部门,经理,薪水)
您发现以下查询明显慢于预期.有一个索引
salary,您已验证查询计划正在使用它.
SELECT *
FROM Employee
WHERE salary = 48000
Run Code Online (Sandbox Code Playgroud)
请说明此查询比预期慢的可能原因,并提供解决该原因的调优解决方案.
我有两个想法,为什么这个查询比预期慢.一个是我们正在尝试SELECT *而不是SELECT Employee.salary减慢查询速度,因为我们必须搜索所有列而不是一个.另一个想法是,该指数salary是非群集,和我们想用一个聚集索引,因为该公司可能会非常大,这将是有意义由组织表salary场.
这两个解决方案中的任何一个都会加速这个查询吗 即要么改变SELECT *对SELECT Employee.salary或明确设置的指标salary要群集?