我有这个表结构:
CREATE TABLE users
(
uid bigint NOT NULL,
first_name character varying,
last_name character varying,
email character varying,
login_count integer,
CONSTRAINT users_pkey PRIMARY KEY (uid)
)
使用此索引:
CREATE INDEX users__login_count
ON users
USING btree
(login_count DESC NULLS LAST);
login_count列可能包含NULL值,我需要选择按login_count降序排序的所有用户,并且最后需要NULL。
不幸的是这个查询:
SELECT * FROM users ORDER BY login_count DESC LIMIT 30;
不会使用索引,所以NULL处于开始状态,为什么?
答案 0 :(得分:2)
如何定义索引不会更改查询的含义。为了使用索引,索引的顺序必须与查询的顺序相匹配。
话虽如此,doesn't appear that MySQL supports nulls last
。尝试:
SELECT *
FROM users
ORDER BY
case when login_count is null then -1 else login_count end DESC
LIMIT 30;
答案 1 :(得分:1)