小编ABl*_*yon的帖子

简单的SQL路径查询?

我正在通过一个介绍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 postgresql

6
推荐指数
1
解决办法
701
查看次数

如何加快这个SQL索引查询?

给定以下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要群集?

mysql indexing

5
推荐指数
1
解决办法
262
查看次数

标签 统计

indexing ×1

mysql ×1

postgresql ×1

sql ×1