1.如何了解select查询运行时是否使用了创建的index?1.我的任务的具体示例:索引:
select
index
events (page,notuniqueid,type,timestamp);
SQL语句:
SELECT * FROM events WHERE type = 'comment' AND TIMESTAMP > $time AND PAGE = '$page' LIMIT 1
在此查询中将使用索引吗?
kx5bkwkv1#
要了解查询是如何执行的,请使用EXPLAIN QUERY PLAN运行它:
> EXPLAIN QUERY PLAN SELECT * from events WHERE type='comment' AND TIMESTAMP > $time AND PAGE = '$page' LIMIT 1 0|0|0|SEARCH TABLE events USING INDEX MyLittleIndex (page=?)
在这种情况下,只有索引的第一列可以使用,因为在notuniqueuid列上没有查找。更好的索引(对于这个查询)应该在(page,comment,timestamp)上。(请参见The SQLite Query Planner。)
notuniqueuid
(page,comment,timestamp)
pjngdqdw2#
按照@CL描述的那样使用了EXPLAIN QUERY PLAN之后,您可能希望确切地查看您拥有哪些索引……
EXPLAIN QUERY PLAN
SELECT name, tbl_name FROM sqlite_master WHERE type = 'index'
2条答案
按热度按时间kx5bkwkv1#
要了解查询是如何执行的,请使用EXPLAIN QUERY PLAN运行它:
在这种情况下,只有索引的第一列可以使用,因为在
notuniqueuid
列上没有查找。更好的索引(对于这个查询)应该在
(page,comment,timestamp)
上。(请参见The SQLite Query Planner。)
pjngdqdw2#
按照@CL描述的那样使用了
EXPLAIN QUERY PLAN
之后,您可能希望确切地查看您拥有哪些索引……