【发布时间】:2015-02-06 07:57:56
【问题描述】:
我有 5000 万行的表格。名为 u_sphinx 的一列非常重要,可用值是 1、2、3。现在所有行都有值 3 但是,当我检查新行(u_sphinx = 1)时,查询非常慢。有什么问题?也许索引坏了?服务器:Debian,8GB 4x Intel(R) Xeon(R) CPU E3-1220 V2 @ 3.10GHz
表结构:
base=> \d u_user
表“public.u_user”
专栏 |类型 |修饰符
u_ip |性格变化|
u_agent |正文 |
u_agent_js |正文 |
u_resolution_id |整数 |
u_os |性格变化|
u_os_id |小号 |
u_平台 |性格变化|
u_language |性格变化|
u_language_id |小号 |
u_language_js |性格变化|
u_cookie |小号 |
u_java |小号 |
u_color_depth |整数 |
u_flash |性格变化|
u_charset |性格变化|
u_doctype |性格变化|
u_compat_mode |性格变化|
u_sex |性格变化|
u_age |性格变化|
u_theme |性格变化|
你的行为 |性格变化|
u_targeting |性格变化|
u_resolution |性格变化|
u_user_hash |大整数 |
u_tech_hash |性格变化|
u_last_target_data_time |整数 |
u_last_target_prof_time |整数 |
u_id |大整数 |不为空默认 nextval('u_user_u_id_seq'::regclass)
u_sphinx |小号 |不为空默认 1::smallint
索引:
“u_user_u_id_pk”主键,btree (u_id)
“u_user_hash_index” btree (u_user_hash)
"u_user_u_sphinx_ind" btree (u_sphinx)
慢查询:
base=> 解释分析 SELECT u_id FROM u_user WHERE u_sphinx = 1 LIMIT 1; 查询计划 -------------------------------------------------- -------------------------------------------------- ------------------------- 限制(成本=0.00..0.15 行=1 宽度=8)(实际时间=485146.252..485146.252 行=0 循环=1) -> Seq Scan on u_user (cost=0.00..3023707.80 rows=19848860 width=8) (实际时间=485146.249..485146.249 rows=0 loops=1) 过滤器:(u_sphinx = 1) 过滤器删除的行:23170476 总运行时间:485160.241 毫秒 (5 行)已解决:
添加部分索引后
base=> 解释分析 SELECT u_id FROM u_user WHERE u_sphinx = 1 LIMIT 1; 查询计划 -------------------------------------------------- -------------------------------------------------- ---------------------------------- 限制(成本=0.27..4.28 行=1 宽度=8)(实际时间=0.063..0.063 行=0 循环=1) -> 在 u_user 上使用 u_user_u_sphinx_index_1 进行索引扫描(成本=0.27..4.28 行=1 宽度=8)(实际时间=0.061..0.061 行=0 循环=1) 指数条件:(u_sphinx = 1) 总运行时间:0.106 毫秒感谢@Kouber Saparev
【问题讨论】:
标签: postgresql