PHP 面试题 Mysql 索引

Stagezm 2011-04-14 06:09:26
题目:
PRODUCT表(id,name,price,count)
select * from PRODUCT where price=100

目前已经在price字段上加上了索引
1.不过以上查询速度还是很慢,请试说出慢的原因
2.请问如何优化才能加快速度
...全文
348 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaosaner3 2012-09-29
  • 打赏
  • 举报
回复
楼上说的不错,但是好像是个坟
stoneJU 2011-06-15
  • 打赏
  • 举报
回复
慢的原因基本上为数据量太大
优化方法就是将表的记录减少,根据price的情况,大概看看价格的区间,根据价格区间分表,这样在插入数据的时候判断price;但是大大提高了查询的速度,只要判断price,然后确定从哪个表中去查询数据就可以了
lornechang 2011-04-18
  • 打赏
  • 举报
回复
这真的是面试题?把楼上几位的答案说给面试官是不是分更高?
life169 2011-04-17
  • 打赏
  • 举报
回复
price中重复数据太多导致查询效率下降的可能 最大。
fxs_2008 2011-04-17
  • 打赏
  • 举报
回复
单就这个查询而言,

慢是因为它不是唯一索引;



如果数据量大,基本上没有太好办法优化! 或者可以给价格加一个区间联合索引,这样可以选查区间,后后再查100
kaifadi 2011-04-15
  • 打赏
  • 举报
回复
也许price字段根本就不适合加索引,并不是所有字段都能加索引,有些加了反而更慢!
foolbirdflyfirst 2011-04-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 falizixun2 的回复:]

select * from PRODUCT where price=100

就这些?加了索引还很慢的话就没道理了。索引就是非遍历查询,直接定位到price为100的地方!数据量大的话,查询上肯定要比不加要快很多!

难道你的数据库里有很多个price为100的数据?
[/Quote]

yes,有可能,比如price为100的数据占了整个表数据量的8,90%,那mysql会认为不查索引树反而效率高
kyzy_yy_pm 2011-04-15
  • 打赏
  • 举报
回复
这个要看需求了,不过看样子这个表中的几个字段都是需要经常用作where条件的,所以最好建立复合索引
hahaliu005 2011-04-15
  • 打赏
  • 举报
回复
这个也跟存储引擎有关的,不同存储引擎的索引结构也是不一样的
kaifadi 2011-04-15
  • 打赏
  • 举报
回复
select * from PRODUCT where price=100

就这些?加了索引还很慢的话就没道理了。索引就是非遍历查询,直接定位到price为100的地方!数据量大的话,查询上肯定要比不加要快很多!

难道你的数据库里有很多个price为100的数据?
helloyou0 2011-04-14
  • 打赏
  • 举报
回复
这面试题出的.......

库结构都不给一般说不出来什么....
lazyboy_wu 2011-04-14
  • 打赏
  • 举报
回复
1、数据量大 加上limit 一定数量的限制
2、字段可以写出只要需要的字段 seletc id, name 等
3、主键和price一起做一个联合索引

剩下的楼下补充

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧