研究了半天Mysql文档,也没看懂(翻译的真是难懂。。)
现在有如下一个表:
CREATE TABLE `t_ip_test` (
`id` BIGINT(20) NOT NULL,
`from_ip` BIGINT(20) NOT NULL,
`to_ip` BIGINT(20) NOT NULL,
`name_en1` VARCHAR(20) DEFAULT NULL,
`name_en2` VARCHAR(20) DEFAULT NULL,
`country_name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
)就是一个ip与地理位置匹配的表
应该创建哪种索引可以对如下查询生效呢?
SELECT * FROM t_ip_test WHERE INET_ATON('209.207.224.40')>=from_ip AND INET_ATON('209.207.224.40')<=to_ip;我之前创建的索引CREATE INDEX ip ON t_ip_test(id,from_ip,to_ip);
explain之后发现并没有使用,查了半天文档,是在没搞明白文档里说的是啥。。难道意思是要使用hash-索引?
那是不是要建memory表呢?
现在有如下一个表:
CREATE TABLE `t_ip_test` (
`id` BIGINT(20) NOT NULL,
`from_ip` BIGINT(20) NOT NULL,
`to_ip` BIGINT(20) NOT NULL,
`name_en1` VARCHAR(20) DEFAULT NULL,
`name_en2` VARCHAR(20) DEFAULT NULL,
`country_name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`id`)
)就是一个ip与地理位置匹配的表
应该创建哪种索引可以对如下查询生效呢?
SELECT * FROM t_ip_test WHERE INET_ATON('209.207.224.40')>=from_ip AND INET_ATON('209.207.224.40')<=to_ip;我之前创建的索引CREATE INDEX ip ON t_ip_test(id,from_ip,to_ip);
explain之后发现并没有使用,查了半天文档,是在没搞明白文档里说的是啥。。难道意思是要使用hash-索引?
那是不是要建memory表呢?
解决方案 »
- mysql中 数据类型 设置为double的 字段 在页面中显示的数据问题
- 何为松散索引扫描? 何为紧凑索引扫描?
- 分不多了,关于一张数据表的设计
- 高负载下,Mysql表的读写性能问题,如何防止损坏
- 高手指点啊.(100分求教)........Can't connect to MySQL server on 'localhost' (10055) ( 2003 )
- 在Window下建的MySQL数据库能不能用Linux下的程序访问
- 帮我分析分析,这个进程,
- 急!!!有临时表吗,怎么用?
- 关于其他数据表/库文件转换进MySQL库的问题
- 事务隔离级别
- mysql卸载之后怎么重新安装出错啊?
- mysql 的limit 问题 非常简单
可是为啥我创建的BTREE索引无效呢
这样试试呢!
饿 sorry,前面写错了 CREATE INDEX ip ON t_ip_test(from_ip,to_ip); 我确实是这么写的,但是没有效果,很纠结
我把查询条件改成= 之后,explain一下发现索引是有效的SELECT * FROM t_ip_test WHERE 3520061480 =from_ip AND 3520061480 =to_ip; 但是切换成SELECT * FROM T_ip_country WHERE from_ip<=3520061480 AND to_ip>=3520061480;之后检索到了可用索引,但是并没有使用,仍然进行的是ALL扫描
这样也是可以用到索引的
from_ip<=3520061480 AND to_ip>=3520061480难道是因为两个不同的变量就不可以了?