database - Partitions by null values with MySQL -
i have table:
create table `newtable` ( `iblock_element_id` int(11) not null , `property_1836` int(11) null default null , `description_1836` varchar(255) character set cp1251 collate cp1251_general_ci null default null , `property_1837` int(11) null default 0 , `description_1837` varchar(255) character set cp1251 collate cp1251_general_ci null default null , `property_1838` decimal(18,4) null default null , `description_1838` varchar(255) character set cp1251 collate cp1251_general_ci null default null , `property_3139` int(11) null default 0 , `description_3139` varchar(255) character set cp1251 collate cp1251_general_ci null default null , `property_3173` decimal(18,4) null default null , `description_3173` varchar(255) character set cp1251 collate cp1251_general_ci null default null , primary key (`iblock_element_id`), index `ix_perf_b_iblock_element_pr_1` (`property_1837`) using btree , index `ix_perf_b_iblock_element_pr_2` (`property_1836`) using btree , index `ix_perf_b_iblock_element_pr_3` (`property_3139`) using btree ) engine=innodb default character set=cp1251 collate=cp1251_general_ci row_format=compact;
and query condition:
where property_3139 null
i can't change table or query. know, if i'll split table 2 partitions - queries selecting nullable values work faster.
what kind of trick can use this? null , not null not range , can't use list of values.
partition
probably won't help.
null
separate value in index. think of nulls being stored in index before other values. hence, is null
, is not null
can treated 'range' optimization purposes.
however... if more 20% (10%-30%, depending on phase of moon) of table in desired range, optimizer decide faster full table scan instead of bouncing , forth between index , data.
back probably...
- if small number of rows have null, index fine; partitioning won't much.
- if medium number of rows have null, partitioning noticeably.
- if rows have null, full table scan scanning of 1 partition.
note: cannot partition on more 1 column. so, if partition on property_3139
, rest of properties out of luck.
Comments
Post a Comment