提问1 :
select * from t1 where salary >= 400; salary 是 INT 类型
ALTER TABLE t1 add INDEX sysalary(salary);我在 salary 建了个索引 , 可是运行时却没有使用到,是为什么? 跟数字有关吗?
因为如果我方的是非数字的话就会用到了.提问2 :如果在一个 column 内有一个值重复了超过50% 是不是查询 where xx = "那个值" 的时候就没法使用索引了?
但where xx = "其他值" 就会用到索引 索引
select * from t1 where salary >= 400; salary 是 INT 类型
ALTER TABLE t1 add INDEX sysalary(salary);我在 salary 建了个索引 , 可是运行时却没有使用到,是为什么? 跟数字有关吗?
因为如果我方的是非数字的话就会用到了.提问2 :如果在一个 column 内有一个值重复了超过50% 是不是查询 where xx = "那个值" 的时候就没法使用索引了?
但where xx = "其他值" 就会用到索引 索引
解决方案 »
- 请教一个关于mysql存储过程的问题!!
- MySQL 5.1 安装过程中报apply security setting错误的解决办法
- 连不上SQL
- double(18,2)与numeric(18,2)这两种写法有区别吗?
- 2G多的表,我想新增一个字段,可是很慢,执行不了.请问怎么办?
- 导出sql数据到后缀为.xls文件中
- datediff(s.date_to_deprovision,s.create_date) >= '2008-05-01' 是什么意思,大家可以解释一下吗?
- 请教一个SQL句。
- 此帖问题已解决,那位近来接分
- 想必各位大多都是在UNIX平台上使用一种高级语言来+MySQL来开发数据库程序的,那么你在UNIX平台上最喜欢用何种语言工具开发呢?
- 无奈!DBA生态圈太脏
- 用load data 导入txt文件的中文数据问题
1.explain select a.id,a.datetime,a.from_username,a.link,b.name from a_msgbox a inner join fb_member b on a.from_username = b.username
where to_username='keatkeat87' order by id desc;
这句2个table 都用到了索引. type 是 ref 2.explain select * from (select a.id from t1 a inner join t2 b on a.username = b.username where username='keatkeat87' order by id desc)c group by from_username;
当我在外面加了个 select * from (第一句)
table a 的 type 变成了 all (row 也多了) 这是为什么呢? key 和 key_len 都也没变.在补上一题 (这是我想实现的东西)
表1
id name order_record
1 a invoice-001
2 a invoice-002
3 b invoice-003
4 b invoice-004
我想获取 每个name 的 最新一条order_record 该怎么写?
select * from (select order_record from table1 order by id desc) group by name .
我用了这一句,就发现上一题的问题...是否有其它语句可以代替 ?
select * from t1 where salary >= 400; salary 是 INT 类型
ALTER TABLE t1 add INDEX sysalary(salary);我在 salary 建了个索引 , 可是运行时却没有使用到,是为什么? 跟数字有关吗?
因为如果我方的是非数字的话就会用到了.
-----因为不走索引效率高提问2 :如果在一个 column 内有一个值重复了超过50% 是不是查询 where xx = "那个值" 的时候就没法使用索引了?
但where xx = "其他值" 就会用到索引
---没有具体的比例 mysql自己判断查询代价是否是最优的
1.不太会,不好发表意见。2.我想获取 每个name 的 最新一条order_record 该怎么写?
select name ,max(order_record ) from tablename
group by name
这个就可以的。
select name ,max(order_record ) from tablename
group by name
这个就可以的。感谢 ! 我是不是要在每个 select column 都加上 max() ?
select name,max(order_record) 之后order_record 对了,不过 name 的位置却不一样了
id name order_record
1 a invoice-002
3 b invoice-004
//id 和 name 没随着 order_record 了
似乎我每个都加 max ()就可以了 .
select name ,max(order_record ) from tablename
group by name
这个就可以的。啊,不行啊 ! max是针对单一 column而已 , 其它的column没跟着走
select id,name,max(order_record ) from tablename
group by name
id name order_record
1 a invoice-002 <--id 和 name 不属于 invoice --002 的
3 b invoice-004
2、mysql要看查询代价那个是最优的。