mysql a 表 (100万记录)下面一个字段
`isH` char(1) NOT NULL,这个字段值仅仅有‘Y’ 'N" 2个值 。 sql 查询这个字段在where后面出现很多。是否有必要为这个字段建立索引??
(
如果isH有5个值是否有必要建立索引?此外
外键字段 disId` int(11) 有2423423423 这么长 ,
日期时间字段` (`startDate`) 如2010-1-1 12:23:21
这2个也需要建立索引sql 这个表a的很多
select from a where isH='Y';
select from a where startDate=?
select from a where disId=?
)
解决方案 »
- 求助如何查询出N张表中的相同列和每个表各自的不同列(N不定且表结构不能预知)
- 关于except用法-求助
- 请教一个更新数据的SQL语句
- I have download the sourcecode of the Mysql . but I can not find the development document(I have try my best to do it )
- 这个查询方案怎么写? 请高手指点啊。
- 谁在Window2000中装过Mysql的,请进来详谈~~
- 准备学习mysql,请问如何安装mysql,以及怎么设置
- ~~~~查字典,修改字段值~~~~
- MYSQL触发器问题
- 如何得到同一字段前后记录相减的值?
- InnoDB crash掉了?
- postgresql 安装失败?求教
1 唯一性太差的不适合单独建立索引
如状态字段 类型字段总共也就几个或者几十个值重复使用。每个值都有上万的记录。
如果一个sql返回数据超过全表的15%,就不因该用索引扫描来完成这个查询。
2 更新非常频繁的不适合创建索引推理 `isH` char(1) NOT NULL,
tpe 等全部去掉
这样查询整型要快 这样看??/
按照理论 是不应该建立的
但是很多有经验的dba 认为还是应该建立 。 到底是建还是不建立??
+----------------------+------------+------------------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------------------+------------+------------------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
| a | 0 | PRIMARY | 1 | id | A | 435344 | NULL | NULL | | BTREE | |
| a | 0 | PRIMARY | 2 | messId | A | 435344 | NULL | NULL | | BTREE | |
| a | 1 | idx_BO_outhistory | 1 | outcomeId | A | 435344 | NULL | NULL | | BTREE | |
| a | 1 | idx_BO_bhistory | 1 | bogIdentifier | A | 435344 | NULL | NULL | | BTREE | |
| a | 1 | idx_BisHiry | 1 | isH | A | 18 | NULL | NULL | | BTREE | |
| a | 1 | idx_BedDate | 1 | odgedDate | A | 435344 | NULL | NULL | | BTREE | |
+----------------------+------------+------------------------------+--------------+-----------------+-----------+-------------+----------+--------+------+------------+---------+
6 rows in set
这个是 所有的indes 详细 分析信息
这个是字段isH` char(1) NOT NULL 的索引。 他的Cardinality =18.
其他字段都是435344 的Cardinality 。这个表总记录数是435344。 他的值只有2个 'Y' 'N'
| a | 1 | idx_BisHiry | 1 | isH | A | 18 | NULL |问是否哟必要建立这个索引???
从前面的理论 唯一性太差的不适合单独建立索引。 这个列不适合建立su索引show keys in a; 这个字段Cardinality =18. (该表总记录44万 只有值只有2个 'Y' 'N')
这里想知道Cardinality =18.能证明什么??
http://dev.firnow.com/course/7_databases/mysql/myshl/20100119/192665.html
show keys in a; 这个字段Cardinality =18. (该表总记录44万 只有值只有2个 'Y' 'N')
如果Cardinality表示唯一值的个数 那么这里他的值应该是2或者3 ('Y' 'N' NULL). 但是从mysql执行得到该Cardinality =18.有谁能解释吗 ???