āĻ¸āĻžāĻ°āĻž āĻĻā§āĻļā§ āĻ¸ā§āĻ˛āĻ¸ āĻ
āĻĢāĻŋāĻ¸ āĻĨā§āĻā§ āĻšāĻžāĻāĻžāĻ° āĻšāĻžāĻāĻžāĻ° āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ° āĻ āĻŋāĻ āĻāĻ°ā§
āĻ
āĻ¤āĻāĻŦ, āĻāĻāĻŋ āĻāĻļā§āĻāĻ°ā§āĻ¯āĻāĻ¨āĻ āĻ¨āĻ¯āĻŧ āĻ¯ā§, āĻāĻŦāĻžāĻ°āĻ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻ˛ā§āĻĄ āĻāĻ°āĻž āĻĄā§āĻāĻžāĻŦā§āĻ¸āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋāĻ¤ā§ "āĻāĻžāĻ°ā§" āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻž - āĻāĻŽāĻžāĻĻā§āĻ° āĻ¨āĻŋāĻāĻ¸ā§āĻŦ
āĻ¤āĻĻā§āĻĒāĻ°āĻŋ, āĻāĻ°āĻ āĻ¤āĻĻāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻāĻ°ā§āĻˇāĻŖā§āĻ¯āĻŧ āĻāĻĻāĻžāĻšāĻ°āĻŖ āĻĒā§āĻ°āĻāĻžāĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧā§āĻā§ āĻĒā§āĻ°āĻĨāĻŽā§ āĻ āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻā§āĻļāĻžāĻ¨, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž āĻ āĻŦāĻ¨āĻ¤āĻŋ āĻŦā§āĻļ āĻāĻ¯āĻŧā§āĻāĻāĻŋ āĻĻāĻ˛ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻ° āĻ§āĻžāĻ°āĻžāĻŦāĻžāĻšāĻŋāĻ āĻ¸āĻŽāĻžāĻĒā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§ āĻ āĻ¨ā§āĻ°ā§āĻ§, āĻ¯āĻžāĻ° āĻĒā§āĻ°āĻ¤ā§āĻ¯ā§āĻāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ āĻāĻĻā§āĻĻā§āĻļā§āĻ¯ āĻĨā§āĻā§ āĻāĻžāĻ āĻāĻ°ā§āĻā§āĨ¤
0: āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŋ āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛ā§āĻ¨
[āĻā§āĻĄāĻŋāĻĒāĻŋāĻāĻŋ
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ¯āĻāĻ¨ āĻ¨āĻžāĻŽ āĻĻā§āĻŦāĻžāĻ°āĻž āĻāĻāĻāĻŋ "āĻĻā§āĻ°ā§āĻ¤" āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻĨāĻž āĻŦāĻ˛ā§ āĻ¤āĻāĻ¨ āĻ¤āĻžāĻā§ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻā§ āĻŦā§āĻāĻžāĻ¯āĻŧ? āĻāĻāĻŋ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻāĻ¨āĻ āĻāĻāĻāĻŋ "āĻ¨ā§āĻ¯āĻžāĻ¯ā§āĻ¯" āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻšāĻŋāĻ¸āĻžāĻŦā§ āĻĒāĻ°āĻŋāĻŖāĻ¤ āĻšāĻ¯āĻŧ āĻ¨āĻž ... LIKE '%ŅОСа%'
- āĻ¸āĻŦ āĻĒāĻ°ā§, āĻ¤āĻžāĻ°āĻĒāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¨āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 'РОСаĐģиŅ'
и 'ĐĐ°ĐŗаСиĐŊ РОСа'
āĻāĻŋāĻ¨ā§āĻ¤ā§ 'ĐŅОСа'
āĻāĻŽāĻ¨āĻāĻŋ āĻāĻŽāĻ¨āĻāĻŋ 'ĐĐžĐŧ ĐĐĩĐ´Đ° ĐĐžŅОСа'
.
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻŽāĻžāĻ¨ā§ āĻĒāĻžāĻ°āĻŋāĻŦāĻžāĻ°āĻŋāĻ āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻāĻĒāĻ¨āĻŋ āĻ¤āĻžāĻā§ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°āĻŦā§āĻ¨ āĻāĻāĻāĻŋ āĻļāĻŦā§āĻĻā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°ā§āĻ¨ āĻļāĻŋāĻ°ā§āĻ¨āĻžāĻŽā§ āĻāĻŦāĻ āĻāĻ°ā§ āĻĒā§āĻ°āĻžāĻ¸āĻā§āĻāĻŋāĻ āĻāĻŋ āĻĻā§āĻāĻžāĻ¨ āĻļā§āĻ°ā§ āĻšāĻ¯āĻŧ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻŦāĻ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻ¸āĻā§āĻā§ āĻ¸āĻā§āĻā§ - āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻāĻ¨āĻĒā§āĻ āĻ¸āĻšāĨ¤
1: āĻāĻžāĻ¸ā§āĻ āĻ¸ā§āĻŽāĻŋāĻ¤ āĻāĻ°ā§āĻ¨
āĻāĻŦāĻ āĻāĻ°āĻ āĻŦā§āĻļāĻŋ, āĻāĻāĻāĻ¨ āĻŦā§āĻ¯āĻā§āĻ¤āĻŋ āĻŦāĻŋāĻļā§āĻˇāĻāĻžāĻŦā§ āĻĒāĻ°āĻŋāĻāĻ¯āĻŧ āĻāĻ°āĻŋāĻ¯āĻŧā§ āĻĻā§āĻŦā§āĻ¨ āĻ¨āĻž 'ŅОС ĐŧĐ°ĐŗаС'
āĻ¯āĻžāĻ¤ā§ āĻāĻĒāĻ¨āĻžāĻā§ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻļāĻŦā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻĒāĻ¸āĻ°ā§āĻ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻ¨āĻž, āĻāĻāĻāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻļāĻŦā§āĻĻāĻā§āĻ˛āĻŋ āĻāĻā§āĻāĻžāĻā§āĻ¤āĻāĻžāĻŦā§ "āĻāĻ¨ā§āĻĄāĻžāĻ°-āĻāĻ¨ā§āĻāĻžāĻ°" āĻāĻ°āĻžāĻ° āĻā§āĻ¯āĻŧā§ āĻļā§āĻˇ āĻļāĻŦā§āĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻāĻā§āĻāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĻā§āĻāĻ¯āĻŧāĻž āĻ
āĻ¨ā§āĻ āĻ¸āĻšāĻ - āĻĻā§āĻā§āĻ¨ āĻ¯ā§ āĻā§āĻ¨āĻ āĻ¸āĻžāĻ°ā§āĻ āĻāĻā§āĻāĻŋāĻ¨ āĻāĻāĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻžāĻ āĻāĻ°ā§ā§ˇ
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤, āĻ¸āĻ āĻŋāĻāĻāĻžāĻŦā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧāĻ¤āĻž āĻĒā§āĻ°āĻŖāĻ¯āĻŧāĻ¨ āĻāĻ°āĻž āĻ
āĻ°ā§āĻ§ā§āĻā§āĻ°āĻ āĻŦā§āĻļāĻŋ āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨āĨ¤ āĻāĻāĻ¨āĻ āĻāĻāĻ¨āĻ āĻ¸āĻžāĻŦāĻ§āĻžāĻ¨ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻā§āĻ¸ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ
āĻāĻāĻāĻŋ āĻŦāĻŋāĻŽā§āĻ°ā§āĻ¤ āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻāĻŋ āĻāĻ°ā§?
1.0: āĻŦāĻžāĻšā§āĻ¯āĻŋāĻ āĻ¸āĻžāĻ°ā§āĻ āĻāĻā§āĻāĻŋāĻ¨
āĻāĻš, āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻāĻ āĻŋāĻ¨, āĻāĻĒāĻ¨āĻŋ āĻŽā§āĻā§āĻ āĻāĻŋāĻā§ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¨āĻž - āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻĄā§āĻāĻĒāĻ¸āĻā§ āĻĻā§āĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ! āĻ¤āĻžāĻĻā§āĻ° āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§āĻ° āĻŦāĻžāĻāĻ°ā§āĻ° āĻ¸āĻžāĻ°ā§āĻ āĻāĻā§āĻāĻŋāĻ¨ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻāĻŋāĻ¨: āĻ¸ā§āĻĢāĻŋāĻā§āĻāĻ¸, āĻāĻ˛āĻžāĻ¸ā§āĻāĻŋāĻ āĻ¸āĻžāĻ°ā§āĻ, ...
āĻ¸āĻŋāĻā§āĻā§āĻ°ā§āĻ¨āĻžāĻāĻā§āĻļāĻ¨ āĻāĻŦāĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻĻāĻā§āĻˇāĻ¤āĻžāĻ° āĻĒāĻ°āĻŋāĻĒā§āĻ°ā§āĻā§āĻˇāĻŋāĻ¤ā§ āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°ā§, āĻ¸āĻŽāĻ¯āĻŧ āĻ¸āĻžāĻĒā§āĻā§āĻˇ āĻŦāĻŋāĻāĻ˛ā§āĻĒāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ¨āĻ¯āĻŧ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻā§āĻ˛āĻžāĻ¯āĻŧā§āĻ¨ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¤āĻžāĻ° āĻ
ā§āĻ¯āĻžāĻāĻžāĻāĻ¨ā§āĻ āĻĄā§āĻāĻžāĻ° āĻāĻžāĻ āĻžāĻŽā§āĻ° āĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻ°āĻž āĻšāĻ¯āĻŧāĨ¤ āĻāĻŦāĻ āĻĄā§āĻāĻžāĻ¤ā§ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻāĻā§āĻ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻļā§āĻ˛āĻ¤āĻž āĻ°āĻ¯āĻŧā§āĻā§ - āĻāĻŦāĻ āĻ¯āĻĻāĻŋ āĻāĻāĻ¨ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ° āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻĄ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°ā§āĻā§ 'ĐĐ°ĐŗаСиĐŊ РОСа'
, āĻ¤āĻžāĻ°āĻĒāĻ° 5-10 āĻ¸ā§āĻā§āĻ¨ā§āĻĄ āĻĒāĻ°ā§ āĻ¤āĻŋāĻ¨āĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻŽāĻ¨ā§ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻ¯ā§ āĻ¤āĻŋāĻ¨āĻŋ āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻŽā§āĻ˛āĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛ā§ āĻā§āĻā§āĻ¨ āĻāĻŦāĻ āĻāĻāĻŋ āĻā§āĻāĻā§ āĻĒā§āĻ¤ā§ āĻāĻŦāĻ āĻ āĻŋāĻ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ā§ˇ
āĻ āĻ¤āĻāĻŦ - āĻāĻ˛ā§āĻ¨ "āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ā§ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ" āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°ā§āĻ¨. āĻ¸ā§āĻāĻžāĻā§āĻ¯āĻŦāĻļāĻ¤, PostgreSQL āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻŋ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ, āĻāĻŦāĻ āĻāĻāĻžāĻ§āĻŋāĻ āĻŦāĻŋāĻāĻ˛ā§āĻĒ - āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻŦā§āĻāĻ¨āĻž āĻāĻ°āĻŦāĨ¤
1.1: "āĻ¸ā§" āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻ
āĻāĻŽāĻ°āĻž "āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻ" āĻļāĻŦā§āĻĻāĻāĻŋāĻā§ āĻāĻāĻāĻĄāĻŧā§ āĻĨāĻžāĻāĻŋāĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ āĻŋāĻ āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻ (āĻāĻŦāĻ āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ āĻāĻā§āĻ¸āĻĒā§āĻ°ā§āĻļāĻ¨ āĻĻā§āĻŦāĻžāĻ°āĻžāĻ!) āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§āĻāĻ āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻŽā§āĻāĻžāĻ° āĻāĻā§
āĻāĻ¸ā§āĻ¨ āĻŽāĻĄā§āĻ˛āĻāĻŋāĻ° āĻ¸āĻ°āĻ˛āĻ¤āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻāĻžāĻ¤ā§āĻ¯āĻŧ āĻĒā§āĻ˛ā§āĻ āĻ¨ā§āĻāĻ¯āĻŧāĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋ:
CREATE TABLE firms(
id
serial
PRIMARY KEY
, name
text
);
āĻāĻŽāĻ°āĻž āĻ¸ā§āĻāĻžāĻ¨ā§ āĻĒā§āĻ°āĻā§āĻ¤ āĻĒā§āĻ°āĻ¤āĻŋāĻˇā§āĻ āĻžāĻ¨ā§āĻ° 7.8 āĻŽāĻŋāĻ˛āĻŋāĻ¯āĻŧāĻ¨ āĻ°ā§āĻāĻ°ā§āĻĄ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻŋ āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ˛āĻŋāĻā§ āĻ¸ā§āĻāĻŋāĻŦāĻĻā§āĻ§ āĻāĻ°āĻŋ:
CREATE EXTENSION pg_trgm;
CREATE INDEX ON firms USING gin(lower(name) gin_trgm_ops);
āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻĨāĻŽ 10āĻāĻŋ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻž āĻ¯āĻžāĻ:
SELECT
*
FROM
firms
WHERE
lower(name) ~ ('(^|s)' || 'ŅОСа')
ORDER BY
lower(name) ~ ('^' || 'ŅОСа') DESC -- ŅĐŊĐ°ŅĐ°ĐģĐ° "ĐŊĐ°ŅиĐŊĐ°ŅŅиĐĩŅŅ ĐŊĐ°"
, lower(name) -- ĐžŅŅĐ°ĐģŅĐŊĐžĐĩ ĐŋĐž Đ°ĐģŅавиŅŅ
LIMIT 10;
āĻāĻā§āĻāĻž, āĻāĻ°āĻāĻŽ... 26ms, 31MB āĻ¤āĻĨā§āĻ¯ āĻāĻŦāĻ 1.7K āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻž āĻ°ā§āĻāĻ°ā§āĻĄ āĻĒāĻĄāĻŧā§āĻ¨ - 10 āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯āĨ¤ āĻāĻāĻžāĻ°āĻšā§āĻĄ āĻā§āĻŦ āĻŦā§āĻļāĻŋ, āĻāĻāĻž āĻāĻŋ āĻāĻ°āĻ āĻĻāĻā§āĻˇ āĻāĻŋāĻā§ āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ?
1.2: āĻĒāĻžāĻ ā§āĻ¯ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨? āĻāĻāĻž FTS!
āĻĒā§āĻ°āĻā§āĻ¤āĻĒāĻā§āĻˇā§, PostgreSQL āĻāĻāĻāĻŋ āĻā§āĻŦ āĻļāĻā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻāĻ°ā§
CREATE INDEX ON firms USING gin(to_tsvector('simple'::regconfig, lower(name)));
SELECT
*
FROM
firms
WHERE
to_tsvector('simple'::regconfig, lower(name)) @@ to_tsquery('simple', 'ŅОСа:*')
ORDER BY
lower(name) ~ ('^' || 'ŅОСа') DESC
, lower(name)
LIMIT 10;
āĻā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ°ā§ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ā§āĻ° āĻ¸āĻŽāĻžāĻ¨ā§āĻ¤āĻ°āĻžāĻ˛āĻāĻ°āĻŖ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻāĻžāĻ¨ā§ āĻāĻāĻā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻāĻ°ā§āĻā§, āĻ¸āĻŽāĻ¯āĻŧāĻā§ āĻ āĻ°ā§āĻ§ā§āĻ āĻāĻ°ā§ āĻā§āĻā§āĻā§ 11ms. āĻšā§āĻ¯āĻžāĻ, āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° 1.5 āĻā§āĻŖ āĻāĻŽ āĻĒāĻĄāĻŧāĻ¤ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛ - āĻŽā§āĻ 20MB. āĻāĻŦāĻ āĻāĻāĻžāĻ¨ā§ āĻāĻŽ - āĻāĻžāĻ˛, āĻāĻžāĻ°āĻŖ āĻāĻŽāĻ°āĻž āĻ¯āĻ¤ āĻŦāĻĄāĻŧ āĻāĻ˛āĻŋāĻāĻŽ āĻŦāĻŋāĻ¯āĻŧā§āĻ āĻāĻ°āĻŋ, āĻā§āĻ¯āĻžāĻļā§ āĻŽāĻŋāĻ¸ āĻšāĻāĻ¯āĻŧāĻžāĻ° āĻ¸āĻŽā§āĻāĻžāĻŦāĻ¨āĻž āĻ¤āĻ¤ āĻŦā§āĻļāĻŋ āĻāĻŦāĻ āĻĄāĻŋāĻ¸ā§āĻ āĻĨā§āĻā§ āĻĒāĻĄāĻŧāĻž āĻĄā§āĻāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻĒā§āĻˇā§āĻ āĻž āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯ "āĻŦā§āĻ°ā§āĻ"āĨ¤
1.3: āĻāĻāĻ¨āĻ āĻ˛āĻžāĻāĻ?
āĻāĻā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻ¸āĻŦāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻžāĻ˛ā§, āĻ¤āĻŦā§ āĻĻāĻŋāĻ¨ā§ āĻāĻ āĻ˛āĻžāĻ āĻŦāĻžāĻ° āĻāĻžāĻ¨āĻ˛ā§āĻ āĻāĻ˛āĻŦā§ 2TB āĻĄā§āĻāĻž āĻĒāĻĄāĻŧā§āĻ¨āĨ¤ āĻ¸āĻ°ā§āĻŦā§āĻ¤ā§āĻ¤āĻŽ - āĻŽā§āĻŽāĻ°āĻŋ āĻĨā§āĻā§, āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻžāĻā§āĻ¯āĻŦāĻžāĻ¨ āĻ¨āĻž āĻšāĻ¨ āĻ¤āĻŦā§ āĻĄāĻŋāĻ¸ā§āĻ āĻĨā§āĻā§āĨ¤ āĻ¤āĻžāĻ āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻā§āĻ āĻāĻ°āĻžāĻ° āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻŋāĨ¤
āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻāĻŋ āĻĻā§āĻāĻ¤ā§ āĻāĻžāĻ¯āĻŧ āĻ¤āĻž āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻĒā§āĻ°āĻĨāĻŽā§ "āĻ¯āĻž āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻ°ā§...". āĻ¤āĻžāĻ āĻāĻāĻŋ āĻ¤āĻžāĻ° āĻŦāĻŋāĻļā§āĻĻā§āĻ§āĻ¤āĻŽ āĻĢāĻ°ā§āĻŽ. text_pattern_ops
! āĻāĻŦāĻ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¯āĻĻāĻŋ āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ 10āĻāĻŋ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ°ā§āĻāĻ°ā§āĻĄ "āĻĒāĻ°ā§āĻ¯āĻžāĻĒā§āĻ¤ āĻ¨āĻž āĻĨāĻžāĻā§" āĻ¤āĻŦā§ āĻāĻŽāĻžāĻĻā§āĻ° FTS āĻ
āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻĒāĻĄāĻŧāĻ¤ā§ āĻšāĻŦā§:
CREATE INDEX ON firms(lower(name) text_pattern_ops);
SELECT
*
FROM
firms
WHERE
lower(name) LIKE ('ŅОСа' || '%')
LIMIT 10;
āĻāĻŽā§āĻāĻžāĻ° āĻāĻ°ā§āĻŽāĻā§āĻˇāĻŽāĻ¤āĻž - āĻŽā§āĻ 0.05ms āĻāĻŦāĻ āĻŽāĻžāĻ¤ā§āĻ° 100KB āĻāĻ° āĻŦā§āĻļāĻŋ āĻĒāĻĄāĻŧā§āĻ¨! āĻāĻŽāĻ°āĻž āĻļā§āĻ§ā§ āĻā§āĻ˛ā§ āĻā§āĻāĻŋ āĻ¨āĻžāĻŽ āĻ āĻ¨ā§āĻ¯āĻžāĻ¯āĻŧā§ āĻ¸āĻžāĻāĻžāĻāĻ¯āĻžāĻ¤ā§ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§ āĻšāĻžāĻ°āĻŋāĻ¯āĻŧā§ āĻ¨āĻž āĻ¯āĻžāĻ¯āĻŧ:
SELECT
*
FROM
firms
WHERE
lower(name) LIKE ('ŅОСа' || '%')
ORDER BY
lower(name)
LIMIT 10;
āĻāĻš, āĻāĻŋāĻā§ āĻāĻ° āĻāĻ¤ āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻ¨āĻ¯āĻŧ - āĻŽāĻ¨ā§ āĻšāĻā§āĻā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻāĻ āĻ°āĻ¯āĻŧā§āĻā§, āĻ¤āĻŦā§ āĻŦāĻžāĻāĻžāĻ āĻāĻ°āĻž āĻāĻāĻŋāĻā§ āĻ āĻ¤āĻŋāĻā§āĻ°āĻŽ āĻāĻ°ā§ ... āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻāĻŋ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻāĻā§āĻ° āĻ¸āĻāĻ¸ā§āĻāĻ°āĻŖā§āĻ° āĻā§āĻ¯āĻŧā§ āĻ āĻ¨ā§āĻ āĻā§āĻŖ āĻŦā§āĻļāĻŋ āĻĻāĻā§āĻˇ, āĻ¤āĻŦā§ ...
1.4: "āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻ˛ āĻĻāĻŋāĻ¯āĻŧā§ āĻļā§āĻˇ āĻāĻ°ā§āĻ¨"
āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻāĻŋ āĻ¸ā§āĻāĻ āĻ°āĻ¯āĻŧā§āĻā§ āĻ¯āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻĒāĻ°āĻŋāĻ¸āĻ° āĻ āĻ¨ā§āĻ¸āĻžāĻ°ā§ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻāĻ°āĻ¤ā§ āĻĻā§āĻ¯āĻŧ āĻāĻŦāĻ āĻŦāĻžāĻāĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻ¸ā§āĻŦāĻžāĻāĻžāĻŦāĻŋāĻ - āĻ¨āĻŋāĻ¯āĻŧāĻŽāĻŋāĻ¤ btree!
CREATE INDEX ON firms(lower(name));
āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻŋāĻ° āĻāĻ¨ā§āĻ¯ āĻ āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ "āĻŽā§āĻ¯āĻžāĻ¨ā§āĻ¯āĻŧāĻžāĻ˛āĻŋ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤" āĻāĻ°āĻ¤ā§ āĻšāĻŦā§:
SELECT
*
FROM
firms
WHERE
lower(name) >= 'ŅОСа' AND
lower(name) <= ('ŅОСа' || chr(65535)) -- Đ´ĐģŅ UTF8, Đ´ĐģŅ ОдĐŊОйаКŅОвŅŅ
- chr(255)
ORDER BY
lower(name)
LIMIT 10;
āĻāĻŽā§āĻāĻžāĻ° - āĻāĻŦāĻ āĻŦāĻžāĻāĻžāĻ āĻāĻžāĻ, āĻāĻŦāĻ āĻ¸āĻŽā§āĻĒāĻĻ āĻāĻ°āĻ āĻ āĻŦāĻļā§āĻˇ "āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸ā§āĻā§āĻĒāĻŋāĻ", "āĻŦāĻŋāĻļā§āĻĻā§āĻ§" FTS āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻšāĻžāĻāĻžāĻ° āĻā§āĻŖ āĻŦā§āĻļāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ°! āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻāĻ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§ āĻ¸āĻāĻā§āĻ°āĻš āĻāĻ°āĻž āĻ āĻŦāĻļā§āĻˇ:
(
SELECT
*
FROM
firms
WHERE
lower(name) >= 'ŅОСа' AND
lower(name) <= ('ŅОСа' || chr(65535)) -- Đ´ĐģŅ UTF8, Đ´ĐģŅ ОдĐŊОйаКŅОвŅŅ
ĐēОдиŅОвОĐē - chr(255)
ORDER BY
lower(name)
LIMIT 10
)
UNION ALL
(
SELECT
*
FROM
firms
WHERE
to_tsvector('simple'::regconfig, lower(name)) @@ to_tsquery('simple', 'ŅОСа:*') AND
lower(name) NOT LIKE ('ŅОСа' || '%') -- "ĐŊĐ°ŅиĐŊĐ°ŅŅиĐĩŅŅ ĐŊĐ°" ĐŧŅ ŅĐļĐĩ ĐŊĐ°ŅĐģи вŅŅĐĩ
ORDER BY
lower(name) ~ ('^' || 'ŅОСа') DESC -- иŅĐŋĐžĐģŅСŅĐĩĐŧ ŅŅ ĐļĐĩ ŅĐžŅŅиŅОвĐēŅ, ŅŅОйŅ ĐĐ ĐŋОКŅи ĐŋĐž btree-иĐŊĐ´ĐĩĐēŅŅ
, lower(name)
LIMIT 10
)
LIMIT 10;
āĻāĻ˛ā§āĻ˛ā§āĻā§āĻ¯ āĻ¯ā§ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻāĻŋ āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻ¯āĻĻāĻŋ āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻļāĻžāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻŽ āĻĢāĻŋāĻ°ā§ āĻāĻ¸ā§ āĻāĻ¤ LIMIT
āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻ¸āĻāĻā§āĻ¯āĻžāĨ¤ āĻĒā§āĻ°āĻļā§āĻ¨āĻā§āĻ˛āĻŋ āĻ
āĻĒā§āĻāĻŋāĻŽāĻžāĻāĻ āĻāĻ°āĻžāĻ° āĻāĻ āĻāĻĒāĻžāĻ¯āĻŧ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§, āĻāĻŽāĻŋ
āĻ¤āĻžāĻ āĻšā§āĻ¯āĻžāĻ, āĻāĻāĻ¨ āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻŦāĻŋāĻ˛ā§ āĻāĻāĻ āĻ¸āĻžāĻĨā§ btree āĻāĻŦāĻ gin āĻāĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒāĻ°āĻŋāĻ¸āĻāĻā§āĻ¯āĻžāĻ¨āĻāĻ¤āĻāĻžāĻŦā§ āĻĻā§āĻāĻž āĻā§āĻā§ āĻ¯ā§ 10% āĻāĻ°āĻ āĻāĻŽ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻĻā§āĻŦāĻŋāĻ¤ā§āĻ¯āĻŧ āĻŦā§āĻ˛āĻā§āĻ° āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ā§ āĻĒā§āĻāĻāĻžāĻ¯āĻŧ. āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻā§ āĻĨā§āĻā§ āĻāĻžāĻ¨āĻž āĻāĻžāĻ¸ā§āĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻŽāĻžāĻŦāĻĻā§āĻ§āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§, āĻāĻŽāĻ°āĻž āĻ¸āĻžāĻ°ā§āĻāĻžāĻ°ā§āĻ° āĻ¸āĻŽā§āĻĒāĻĻā§āĻ° āĻŽā§āĻ āĻāĻ°āĻ āĻĒā§āĻ°āĻžāĻ¯āĻŧ āĻāĻ āĻšāĻžāĻāĻžāĻ° āĻā§āĻŖ āĻāĻŽāĻžāĻ¤ā§ āĻ¸āĻā§āĻˇāĻŽ āĻšāĻ¯āĻŧā§āĻāĻŋ!
1.5*: āĻĢāĻžāĻāĻ˛ āĻāĻžāĻĄāĻŧāĻžāĻ āĻāĻ°ā§āĻ¨
āĻāĻ°ā§āĻ§ā§āĻŦāĻ¤āĻ¨ LIKE
āĻāĻŽāĻ°āĻž āĻā§āĻ˛ āĻŦāĻžāĻāĻžāĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻĨā§āĻā§ āĻŦāĻŋāĻ°āĻ¤ āĻāĻŋāĻ˛. āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§ āĻ
āĻĒāĻžāĻ°ā§āĻāĻ° āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°ā§ "āĻ¸āĻ āĻŋāĻ āĻĒāĻĨā§ āĻ¸ā§āĻ" āĻāĻ°āĻž āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§:
āĻĄāĻŋāĻĢāĻ˛ā§āĻ āĻšāĻ¯āĻŧ
ASC
. āĻāĻĒāĻ°āĻ¨ā§āĻ¤ā§, āĻāĻĒāĻ¨āĻŋ āĻ§āĻžāĻ°āĻžāĻ¯āĻŧ āĻāĻāĻāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻ¸āĻžāĻāĻžāĻ¨ā§āĻ° āĻ āĻĒāĻžāĻ°ā§āĻāĻ°ā§āĻ° āĻ¨āĻžāĻŽ āĻāĻ˛ā§āĻ˛ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨USING
. āĻŦāĻžāĻāĻžāĻ āĻ āĻĒāĻžāĻ°ā§āĻāĻ° āĻ āĻŦāĻļā§āĻ¯āĻ āĻŦāĻŋ-āĻā§āĻ°āĻŋ āĻ āĻĒāĻžāĻ°ā§āĻāĻ°āĻĻā§āĻ° āĻāĻŋāĻā§ āĻĒāĻ°āĻŋāĻŦāĻžāĻ°ā§āĻ° "āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻāĻŽ" āĻŦāĻž "āĻāĻ° āĻā§āĻ¯āĻŧā§ āĻŦāĻĄāĻŧ" āĻ¸āĻĻāĻ¸ā§āĻ¯ āĻšāĻ¤ā§ āĻšāĻŦā§āĨ¤ASC
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻŽāĻ¤ā§āĻ˛ā§āĻ¯USING <
иDESC
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻ¸āĻŽāĻ¤ā§āĻ˛ā§āĻ¯USING >
.
āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§, "āĻāĻŽ" āĻšāĻ¯āĻŧ ~<~
:
SELECT
*
FROM
firms
WHERE
lower(name) LIKE ('ŅОСа' || '%')
ORDER BY
lower(name) USING ~<~
LIMIT 10;
2: āĻ āĻ¨ā§āĻ°ā§āĻ§āĻā§āĻ˛āĻŋ āĻā§āĻāĻžāĻŦā§ āĻāĻ āĻšāĻ¯āĻŧā§ āĻ¯āĻžāĻ¯āĻŧ
āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§āĻāĻŋ āĻāĻ¯āĻŧ āĻŽāĻžāĻ¸ āĻŦāĻž āĻāĻ āĻŦāĻāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ "āĻŦā§āĻ°ā§" āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻ°ā§āĻā§āĻāĻŋ āĻāĻŦāĻ āĻŦāĻŋāĻ¸ā§āĻŽāĻ¯āĻŧā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻŽāĻ°āĻž āĻāĻŦāĻžāĻ° āĻŽā§āĻŽāĻ°āĻŋāĻ° āĻŽā§āĻ āĻĻā§āĻ¨āĻŋāĻ "āĻĒāĻžāĻŽā§āĻĒāĻŋāĻ" āĻāĻ° āĻ¸ā§āĻāĻāĻā§āĻ˛āĻŋāĻ° āĻ¸āĻžāĻĨā§ "āĻļā§āĻ°ā§āĻˇā§" āĻā§āĻāĻā§ āĻĒāĻžāĻ (āĻŦāĻžāĻĢāĻžāĻ° āĻļā§āĻ¯āĻŧāĻžāĻ°ā§āĻĄ āĻšāĻŋāĻ) āĻāĻ¨ 5.5TB - āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻāĻŋ āĻŽā§āĻ˛āĻ¤ āĻāĻŋāĻ˛ āĻ¤āĻžāĻ° āĻā§āĻ¯āĻŧā§āĻ āĻŦā§āĻļāĻŋāĨ¤
āĻ¨āĻž, āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻŦāĻ āĻāĻŽāĻžāĻĻā§āĻ° āĻŦā§āĻ¯āĻŦāĻ¸āĻž āĻŦā§āĻĄāĻŧā§āĻā§, āĻāĻŦāĻ āĻāĻžāĻā§āĻ° āĻāĻžāĻĒ āĻŦā§āĻĄāĻŧā§āĻā§, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖā§ āĻ¨āĻ¯āĻŧ! āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻāĻāĻžāĻ¨ā§ āĻāĻŋāĻā§ āĻĒāĻ°āĻŋāĻˇā§āĻāĻžāĻ° āĻ¨āĻ¯āĻŧ - āĻāĻ¸ā§āĻ¨ āĻāĻāĻŋ āĻŦā§āĻ° āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤
2.1: āĻĒā§āĻāĻŋāĻāĻ¯āĻŧā§āĻ° āĻāĻ¨ā§āĻŽ
āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧā§, āĻ āĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĻāĻ˛ āĻāĻāĻ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻ¸āĻžāĻĨā§ āĻāĻāĻāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻ¸āĻžāĻŦāĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĨā§āĻā§ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ "āĻāĻžāĻāĻĒ" āĻāĻ°āĻž āĻ¸āĻŽā§āĻāĻŦ āĻāĻ°āĻ¤ā§ āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻāĻŦāĻ āĻĒā§āĻāĻŋāĻ¨ā§āĻļāĻ¨ āĻāĻžāĻĄāĻŧāĻž āĻāĻŋ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋ? āĻāĻ° āĻāĻāĻž āĻ¸ā§āĻā§āĻ°ā§ āĻāĻ°āĻž āĻ¯āĻžāĻ!
( ... LIMIT <N> + 10)
UNION ALL
( ... LIMIT <N> + 10)
LIMIT 10 OFFSET <N>;
āĻāĻāĻ¨ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ°ā§āĻ° āĻĒāĻā§āĻˇā§ āĻ¸ā§āĻā§āĻ°ā§āĻ¨āĻŋāĻ āĻāĻžāĻĄāĻŧāĻžāĻ "āĻĒā§āĻˇā§āĻ āĻž-āĻāĻžāĻāĻĒ" āĻ˛ā§āĻĄāĻŋāĻ āĻ¸āĻš āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§āĻ° āĻ°ā§āĻāĻŋāĻ¸ā§āĻāĻžāĻ° āĻĻā§āĻāĻžāĻ¨ā§ āĻ¸āĻŽā§āĻāĻŦ āĻāĻŋāĻ˛ā§ˇ
āĻ āĻŦāĻļā§āĻ¯āĻ, āĻāĻ¸āĻ˛ā§, āĻĄā§āĻāĻžāĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻˇā§āĻ āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻ°āĻ āĻŦā§āĻļāĻŋ āĻāĻ°ā§ āĻĒāĻĄāĻŧāĻž āĻšāĻ¯āĻŧ (āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻ¸āĻŽāĻ¯āĻŧā§āĻ° āĻĨā§āĻā§, āĻ¯āĻž āĻāĻŽāĻ°āĻž āĻŦāĻžāĻ¤āĻŋāĻ˛ āĻāĻ°āĻŦ, āĻāĻŦāĻ āĻĒāĻāĻ¨ā§āĻĻāĻ¸āĻ "āĻ˛ā§āĻ") - āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻĻā§āĻŦā§āĻ¯āĻ°ā§āĻĨāĻšā§āĻ¨ āĻ ā§āĻ¯āĻžāĻ¨ā§āĻāĻŋ-āĻĒā§āĻ¯āĻžāĻāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻŦāĻ āĻāĻ¨ā§āĻāĻžāĻ°āĻĢā§āĻ¸ā§ āĻ¸āĻāĻ°āĻā§āĻˇāĻŋāĻ¤ āĻā§ āĻĨā§āĻā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻ¤ā§ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ āĻļā§āĻ°ā§ āĻāĻ°āĻž āĻāĻ°āĻ āĻ¸āĻ āĻŋāĻ āĻšāĻŦā§, āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻāĻ°āĻ āĻāĻāĻŦāĻžāĻ°āĨ¤
2.2: āĻŦāĻšāĻŋāĻ°āĻžāĻāĻ¤ āĻāĻžāĻ¨
āĻāĻŋāĻā§ āĻ¸āĻŽāĻ¯āĻŧā§, āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§ āĻā§āĻ¯āĻŧā§āĻāĻŋāĻ˛ā§āĻ¨ āĻ¤āĻĨā§āĻ¯ āĻ¸āĻš āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻ¨āĻŽā§āĻ¨āĻž āĻŦā§āĻāĻŋāĻ¤ā§āĻ°ā§āĻ¯ āĻ āĻ¨ā§āĻ¯ āĻā§āĻŦāĻŋāĻ˛ āĻĨā§āĻā§, āĻ¯āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°ā§ āĻĒā§āĻ°ā§āĻŦāĻŦāĻ°ā§āĻ¤ā§ āĻĒā§āĻ°āĻļā§āĻ¨āĻāĻŋ CTE-āĻ¤ā§ āĻĒāĻžāĻ āĻžāĻ¨ā§ āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛:
WITH q AS (
...
LIMIT <N> + 10
)
SELECT
*
, (SELECT ...) sub_query -- ĐēĐ°ĐēОК-ŅĐž СаĐŋŅĐžŅ Đē ŅвŅСаĐŊĐŊОК ŅĐ°ĐąĐģиŅĐĩ
FROM
q
LIMIT 10 OFFSET <N>;
āĻāĻŦāĻ āĻ¤āĻŦā§āĻ, āĻāĻžāĻ°āĻžāĻĒ āĻ¨āĻ¯āĻŧ, āĻ¯ā§āĻšā§āĻ¤ā§ āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧāĻžāĻ°āĻŋāĻāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° 10āĻāĻŋ āĻĢā§āĻ°āĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŽā§āĻ˛ā§āĻ¯āĻžāĻ¯āĻŧāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ, āĻ¯āĻĻāĻŋ āĻ¨āĻž āĻšāĻ¯āĻŧ ...
2.3: āĻāĻ˛āĻžāĻĻāĻž āĻ āĻ¨ā§āĻā§āĻ¤āĻŋāĻšā§āĻ¨ āĻāĻŦāĻ āĻ¨āĻŋāĻ°ā§āĻĻāĻ¯āĻŧ
āĻā§āĻĨāĻžāĻ ā§¨āĻ¯āĻŧ āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧā§āĻ°āĻŋ āĻĨā§āĻā§ āĻāĻ°āĻāĻŽ āĻŦāĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻĒā§āĻ°āĻā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¯āĻŧ āĻ¨āĻŋāĻā§āĻžāĻāĻ NOT LIKE
āĻļāĻ°ā§āĻ¤. āĻāĻ° āĻĒāĻ°ā§āĻ āĻŦā§āĻāĻž āĻ¯āĻžāĻ¯āĻŧ UNION ALL
āĻĢāĻŋāĻ°āĻ¤ā§ āĻļā§āĻ°ā§ āĻāĻ°ā§ āĻāĻŋāĻā§ āĻāĻ¨ā§āĻā§āĻ°āĻŋ āĻĻā§āĻāĻŦāĻžāĻ° - āĻĒā§āĻ°āĻĨāĻŽā§ āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§ āĻĒāĻžāĻāĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧ, āĻāĻŦāĻ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŦāĻžāĻ° - āĻāĻ āĻ˛āĻžāĻāĻ¨ā§āĻ° āĻĒā§āĻ°āĻĨāĻŽ āĻļāĻŦā§āĻĻā§āĻ° āĻļā§āĻ°ā§āĻ¤ā§āĨ¤ āĻ¸ā§āĻŽāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§, 2āĻ¯āĻŧ āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻ° āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ°ā§āĻāĻ°ā§āĻĄ āĻĒā§āĻ°āĻĨāĻŽāĻāĻŋāĻ° āĻ°ā§āĻāĻ°ā§āĻĄā§āĻ° āĻ¸āĻžāĻĨā§ āĻŽā§āĻ˛ā§āĨ¤
āĻāĻžāĻ°āĻŖ āĻā§āĻāĻāĻžāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§ āĻāĻāĻāĻ¨ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ° āĻā§ āĻāĻ°ā§āĻ¨?... āĻĒā§āĻ°āĻļā§āĻ¨ āĻ¨āĻ¯āĻŧ!
- āĻāĻāĻžāĻ° āĻĻā§āĻŦāĻŋāĻā§āĻŖ āĻĒā§āĻ°āĻžāĻĨāĻŽāĻŋāĻ āĻ¨āĻŽā§āĻ¨āĻž
- DISTINCT āĻāĻ°ā§āĻĒ āĻāĻ°ā§āĻ¨āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻ¸āĻžāĻ°āĻŋāĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻāĻ āĻĻā§āĻˇā§āĻāĻžāĻ¨ā§āĻ¤ āĻĒā§āĻ¤ā§
WITH q AS (
( ... LIMIT <2 * N> + 10)
UNION ALL
( ... LIMIT <2 * N> + 10)
LIMIT <2 * N> + 10
)
SELECT DISTINCT
*
, (SELECT ...) sub_query
FROM
q
LIMIT 10 OFFSET <N>;
āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻāĻŋ āĻ¸ā§āĻĒāĻˇā§āĻ āĻ¯ā§ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ, āĻļā§āĻˇ āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤, āĻ āĻŋāĻ āĻāĻāĻ, āĻ¤āĻŦā§ 2āĻ¯āĻŧ CTE āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻ¤ā§ "āĻāĻĄāĻŧāĻ¤ā§" āĻ¯āĻžāĻāĻ¯āĻŧāĻžāĻ° āĻ¸ā§āĻ¯ā§āĻ āĻ āĻ¨ā§āĻ āĻŦā§āĻļāĻŋ āĻšāĻ¯āĻŧā§ āĻā§āĻā§, āĻāĻŦāĻ āĻāĻŽāĻ¨āĻāĻŋ āĻāĻāĻŋ āĻāĻžāĻĄāĻŧāĻžāĻ, āĻ¸ā§āĻĒāĻˇā§āĻāĻāĻžāĻŦā§ āĻāĻ°ā§ āĻĒāĻĄāĻŧā§āĻ¨.
āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ¸āĻŦāĻā§āĻ¯āĻŧā§ āĻĻā§āĻāĻāĻāĻ¨āĻ āĻŦāĻŋāĻˇāĻ¯āĻŧ āĻ¨āĻ¯āĻŧāĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻĄā§āĻā§āĻ˛āĻĒāĻžāĻ° āĻ¨āĻŋāĻ°ā§āĻŦāĻžāĻāĻ¨ āĻāĻ°āĻ¤ā§ āĻŦāĻ˛ā§āĻā§āĻ¨ DISTINCT
āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻāĻāĻŦāĻžāĻ°ā§ āĻ¸āĻŦ āĻā§āĻˇā§āĻ¤ā§āĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ°ā§āĻāĻ°ā§āĻĄ, āĻ¤āĻžāĻ°āĻĒāĻ° sub_query āĻā§āĻˇā§āĻ¤ā§āĻ° āĻ¸ā§āĻŦāĻ¯āĻŧāĻāĻā§āĻ°āĻŋāĻ¯āĻŧāĻāĻžāĻŦā§ āĻ
āĻ¨ā§āĻ¤āĻ°ā§āĻā§āĻā§āĻ¤ āĻāĻ°āĻž āĻšāĻ¯āĻŧ - āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧā§āĻ°āĻŋāĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĨ¤ āĻāĻāĻ¨, āĻāĻžāĻ˛āĻžāĻ¨ā§ DISTINCT
, āĻĄāĻžāĻāĻžāĻŦā§āĻ¸ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§āĻ āĻāĻžāĻ˛āĻžāĻ¨ā§ āĻāĻŋāĻ˛ 10āĻāĻŋ āĻ¸āĻžāĻŦāĻā§āĻ¯āĻŧāĻžāĻ°āĻŋ āĻ¨āĻ¯āĻŧ, āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¸āĻŽāĻ¸ā§āĻ¤ <2 * N> + 10!
2.4: āĻ¸āĻ°ā§āĻŦā§āĻĒāĻ°āĻŋ āĻ¸āĻšāĻ¯ā§āĻāĻŋāĻ¤āĻž!
āĻ¸ā§āĻ¤āĻ°āĻžāĻ, āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§āĻ°āĻž āĻŦā§āĻāĻā§ āĻāĻŋāĻ˛ā§āĻ¨ - āĻ¤āĻžāĻ°āĻž āĻļā§āĻ āĻāĻ°ā§āĻ¨āĻŋ, āĻāĻžāĻ°āĻŖ āĻ°ā§āĻāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻ¤ā§ āĻāĻ˛ā§āĻ˛ā§āĻāĻ¯ā§āĻā§āĻ¯ N āĻŽāĻžāĻ¨āĻā§āĻ˛āĻŋāĻ¤ā§ "āĻ¸ā§āĻā§āĻ°ā§ āĻāĻĒ" āĻĒā§āĻ°āĻ¤āĻŋāĻāĻŋ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ "āĻĒā§āĻˇā§āĻ āĻž" āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĻā§āĻ°ā§āĻāĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§ āĻŽāĻ¨ā§āĻĨāĻ°āĻ¤āĻžāĻ° āĻ¸āĻžāĻĨā§, āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻāĻžāĻ°ā§āĻ° āĻ¸ā§āĻĒāĻˇā§āĻāĻ¤ āĻ§ā§āĻ°ā§āĻ¯ āĻāĻŋāĻ˛ āĻ¨āĻžāĨ¤
āĻ¯āĻ¤āĻā§āĻˇāĻŖ āĻ¨āĻž āĻ āĻ¨ā§āĻ¯ āĻŦāĻŋāĻāĻžāĻā§āĻ° āĻŦāĻŋāĻāĻžāĻļāĻāĻžāĻ°ā§āĻ°āĻž āĻ¤āĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻāĻ¸ā§āĻ¨, āĻāĻŦāĻ āĻāĻŽāĻ¨ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¨āĻž āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋāĻŽā§āĻ˛āĻ āĻ āĻ¨ā§āĻ¸āĻ¨ā§āĻ§āĻžāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ - āĻ āĻ°ā§āĻĨāĻžā§, āĻāĻŽāĻ°āĻž āĻāĻŋāĻā§ āĻ¨āĻŽā§āĻ¨āĻž āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻā§āĻāĻ°ā§ āĻ¨āĻŋāĻ, āĻ āĻ¤āĻŋāĻ°āĻŋāĻā§āĻ¤ āĻļāĻ°ā§āĻ¤ āĻĻā§āĻŦāĻžāĻ°āĻž āĻĢāĻŋāĻ˛ā§āĻāĻžāĻ° āĻāĻ°āĻŋ, āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻāĻāĻāĻŋ, āĻ¤āĻžāĻ°āĻĒāĻ°ā§ āĻĒāĻ°āĻŦāĻ°ā§āĻ¤ā§ āĻ āĻāĻļāĻāĻŋ (āĻ¯āĻž āĻāĻŽāĻžāĻĻā§āĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ N āĻŦā§āĻĻā§āĻ§āĻŋ āĻāĻ°ā§ āĻ āĻ°ā§āĻāĻ¨ āĻāĻ°āĻž āĻšāĻ¯āĻŧ), āĻāĻŦāĻ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻ¨āĻāĻŋ āĻĒā§āĻ°āĻŖ āĻ¨āĻž āĻāĻ°āĻž āĻĒāĻ°ā§āĻ¯āĻ¨ā§āĻ¤āĨ¤
āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻāĻžāĻŦā§, āĻāĻāĻāĻŋ āĻ§āĻ°āĻž āĻ¨āĻŽā§āĻ¨āĻž āĻŽāĻ§ā§āĻ¯ā§ N āĻĒā§āĻ°āĻžāĻ¯āĻŧ 17K āĻĒā§āĻāĻā§āĻā§, āĻāĻŦāĻ āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ āĻĻāĻŋāĻ¨ā§, āĻ āĻ¨ā§āĻ¤āĻ¤ 4K āĻāĻ āĻ§āĻ°āĻ¨ā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§āĻā§āĻ˛āĻŋ "āĻļā§āĻā§āĻāĻ˛ āĻŦāĻ°āĻžāĻŦāĻ°" āĻāĻžāĻ°ā§āĻ¯āĻāĻ° āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻāĻŋāĻ˛āĨ¤ āĻ¤āĻžāĻĻā§āĻ° āĻļā§āĻˇ āĻ¸āĻžāĻšāĻ¸ā§āĻāĻžāĻŦā§ āĻāĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸ā§āĻā§āĻ¯āĻžāĻ¨ āĻĒā§āĻ°āĻ¤āĻŋ āĻĒā§āĻ¨āĻ°āĻžāĻŦā§āĻ¤ā§āĻ¤āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ 1GB āĻŽā§āĻŽāĻ°āĻŋ...
āĻŽā§āĻā§
āĻāĻ¤ā§āĻ¸: www.habr.com