所以我正在阅读索引及其实现,我偶然发现了这个简短解释b-tree索引的网站:
http://20bits.com/articles/interview-questions-database-indexes/
b-tree索引对于仅在单个列上的索引非常有意义,但是假设我创建了一个包含多列的索引,那么b-tree如何工作呢?b树中每个节点的价值是多少?
例如,如果我有这个表:
table customer:
id number
name varchar
phone_number varchar
city varchar
Run Code Online (Sandbox Code Playgroud)
我创建了一个索引:(id,name,city)
然后运行以下查询:
SELECT id, name
FROM customer
WHERE city = 'My City';
Run Code Online (Sandbox Code Playgroud)
该查询如何利用多列索引,或者除非将索引创建为(city,id,name)或(city,name,id),否则它不会使用它?
关于游标的快速问题(特别是Oracle游标).
假设我有一个名为"my_table"的表,它有两列,一个ID和一个名字.有数百万行,但name列始终是字符串'test'.
然后我运行这个PL/SQL脚本:
declare
cursor cur is
select t.id, t.name
from my_table t
order by 1;
begin
for cur_row in cur loop
if (cur_row.name = 'test') then
dbms_output.put_line('everything is fine!');
else
dbms_output.put_line('error error error!!!!!');
exit;
end if;
end loop;
end;
/
Run Code Online (Sandbox Code Playgroud)
如果我在运行时运行此SQL:
update my_table
set name = 'error'
where id = <max id>;
commit;
Run Code Online (Sandbox Code Playgroud)
PL/SQL块中的光标是否会接收该更改并打印出"错误错误错误"并退出?或者它根本不会接受更改......或者它是否会允许更新my_table?
谢谢!
我有一个非常简单的表,其中包含 2 列:message_id 和 server_timestamp,但是当我查看此查询的计划时:
sqlite> explain query plan select message_id, server_timestamp from messages group by message_id order by server_timestamp;
selectid|order|from|detail
0|0|0|SCAN TABLE messages USING COVERING INDEX index_messages_id_server_timestamp
0|0|0|USE TEMP B-TREE FOR ORDER BY
Run Code Online (Sandbox Code Playgroud)
其中index_messages_id_server_timestamp 是(message_id, server_timestamp) 上的索引。
为什么这个查询需要使用临时 B 树进行排序?
假设我有一个包含以下内容的XML文档:
<keywords>
<keyword>test</keyword>
<keyword>test2</keyword>
<keyword>test3</keyword>
<keyword>test4</keyword>
</keywords>
Run Code Online (Sandbox Code Playgroud)
我想使用XSLT在HTML中打印出来,如下所示:
<ul>
<li>test</li>
<li>test2</li>
<li>test3</li>
<li>test4</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我的XSLT会是什么样子?我试过这个:
<ul>
<xsl:for-each select="keywords/keyword">
<li><xsl:value-of select="keyword"/></li>
</xsl:for-each>
</ul>
Run Code Online (Sandbox Code Playgroud)
但是这不会打印出关键字值,只是一个空白项.
<ul>
<xsl:for-each select="keywords">
<li><xsl:value-of select="keyword"/></li>
</xsl:for-each>
</ul>
Run Code Online (Sandbox Code Playgroud)
不起作用(出于显而易见的原因),但至少打印出第一个关键字!
建议?谢谢!