关闭

MySQL之建表:IP地址的存储方法及SQL函数对索引的影响

标签: MySQL
193人阅读 评论(0) 收藏 举报
分类:
        由于MySQL没有专门用来存储IP地址的数据类型,所以通常大部分情况是直接用varchar类型存储。这里可以使用整数类型代替,因为varchar是可变长形,需要多余的一个字节存储长度,使用int类型可以减少存储空间,提高性能。


建立一张存储IP地址的数据表address,顺便在字段login_IP上建立索引:

CREATE TABLE `address` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  `login_IP` int(10) DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `login_IP` (`login_IP`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='IP地址表';

并插入1条数据:

INSERT INTO address (`login_IP`) VALUES ('1234567890');




inet_ntoa()函数:将整数转成IP地址;
inet_aton()函数:将IP地址转成整数;



使用inet_aton()函数将IP转换成整数查找,并分析下查询性能:

EXPLAIN SELECT *
FROM  `address`
WHERE inet_ntoa(login_IP)='73.150.2.210'



这里顺便验证了在使用WHERE查询时候,SQL函数放等号左边将使用全表扫描的访问类型,并有额外的Using where;



换个思路,使用inet_aton()函数,查询并分析性能:

EXPLAIN SELECT *
FROM  `address`
WHERE inet_ntoa(login_IP)='73.150.2.210'



可以看到SQL函数放等号右边,将成功使用利用了索引覆盖扫描的访问类型,查询性能将提高。
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

SQL优化:NULL值与索引的使用

NULL是数据库中特有的数据类型,当一条记录的某个列为NULL,则表示这个列的值是未知的、是不确定的。简单的说,由于NULL存在着无数的可能,因此两个NULL不是相等的关系,同样也不能说两个NULL就...
  • cynhafa
  • cynhafa
  • 2013-08-20 23:40
  • 8849

mysql索引、存储方式对性能的影响

本文配图来自《高性能MySQL(第二版)》。 在数据库中,对性能影响最大的几个策略包括数据库的锁策略、缓存策略、索引策略、存储策略、执行计划优化策略。 索引策略决定数据库快速定位数据的效率,存...
  • permike
  • permike
  • 2015-11-26 15:05
  • 1483

MySQL存储过程----创建索引前,先判断索引是否已经存在,如果存在,则不添加,如果不存在,添加

USE xxx_db; /* 一、 * 安全创建索引的存储过程: * 首先判断索引是否存在,如果已经存在则不创建,如果不存在,则创建。 * 防止索引已经存在,创建出错和删除索引重复创建原来的索...
  • chenyechao
  • chenyechao
  • 2013-06-09 10:56
  • 4198

T-SQL语句:建库,建表,建约束,简单编程, 各种查询,事务,视图,索引,存储过程···

use master go --允许数据中的调用DOS命令 exec sp_configure 'show advanced options' , 1 go reconfigure go exec...
  • fendoudexiaomao
  • fendoudexiaomao
  • 2014-04-04 16:34
  • 2319

mysql建表、索引以及SQL性能优化

1 前言 参考了部分网上资料整理而成。 2 设计部分 2.1 设计表注意事项 2.1.1 定义字段类型 尽可能精确地定义字段类型,包括类型和长度:如不要以字符类型声明纯数字字段,业务上t...
  • bladedk
  • bladedk
  • 2014-11-11 15:37
  • 348

SQL使用DOS命令建库。建表,添加约束,标量值函数,存储过程,触发器,游标

这些代码是很久以前写的,不知怎么找出来了。贴在这里吧。主要是使用DOS建数据库。建表,添加约束,标量值函数,存储过程,触发器。 代码建库: 为了复习在SQL中使用DOS命令,开头便启用了高级选...
  • yaerfeng
  • yaerfeng
  • 2012-01-08 17:21
  • 1892

SQL使用DOS命令建库。建表,添加约束,标量值函数,存储过程,触发器,游标

这些代码是很久以前写的,不知怎么找出来了。贴在这里吧。主要是使用DOS建数据库。建表,添加约束,标量值函数,存储过程,触发器。 代码建库: 为了复习在SQL中使用DOS命令,开头便启用了高...
  • fengsji
  • fengsji
  • 2017-11-08 17:32
  • 176

MySQL存储IP地址的方法

为什么要问如何存储IP? 首先就来阐明一下部分人得反问:为什么要问IP得怎样存,直接varchar类型不就得了吗? 其实做任何程序设计都要在功能实现的基础上最大限度的优化性能。而数据库设计...
  • yzl11
  • yzl11
  • 2016-12-27 10:09
  • 377

mysql高级部分--包含索引建立优化_函数_存储过程_触发器_及游标

  • 2016-06-05 10:51
  • 244KB
  • 下载

MySQL索引与存储方式对性能的影响

本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.penglixun.com/tech/database/mysql_...
  • liaoyuanzi
  • liaoyuanzi
  • 2012-10-18 12:38
  • 391
    个人资料
    • 访问:523次
    • 积分:63
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档