索引的目的是大大提高查询效率,还有读写效率。

kettle向sql里面插入,更新时,也要建立索引,可以大大提升处理时间。

但是建立索引报错:Specified key was too long; max key length is 1000 bytes

这是mysql中,索引字段的类型设置的总体过长,看一下fields里面字段类型,总体加起来不超过1000字节

注意,字段长度,是char长度乘以自身字段类型的位数,累加和不能超过限定的key长1000:

latin1 = 1 byte = 1 character

uft8 = 3 byte = 1 character

gbk = 2 byte = 1 character

以GBK为例:

CREATE UNIQUE INDEX `unique_record` ON reports (`report_name`, `report_client`, `report_city`);

其中report_name varchar(200), report_client varchar(200), report_city varchar(200)

(200 + 200 +200) * 2 = 1200 > 1000,就会报1071错误,只要将report_city改为varchar(100)那么索引就能成功建立。

但如果表是UTF8字符集,那索引还是建立不了,因此要乘以3。

KEY `idx_1` (`packagename`,`storename`,`app_name`,`version`,`category`,`app_link_hash`) USING BTREE

字段类型都是utf8,乘3后,超过1000。

我建的表,字段长度超了,而数据不能动,所以就用了一下小技巧:

1,applink字段要200以上,用了必超。解决办法:将applink用MD5算法,转换为特定长度的applink_hash码(32位长),一一对应,长度特定,用这个新字段只有32位就行了。排除过长字段,转换成特定hashcode,一一对应。

2,kettle插入时分析唯一key。字段之间关系,很多字段联合起来可以唯一确定某个字段,那这个字段就不用出现在索引中。kettle插入时就不用去比对这个字段

3,改成小字段的兼容类型。如果字段内容允许,也就是包含的内容很少,比如utf8的类型,可以修改成gbk,就可以省去一个字段。但是数据内容必须能被gbk包含,否则,内容不识别,插进去也没用。

对于不包含在索引key内的字段,随便设置值。

我的内存不足,所以建立索引时用的字段较少,这样也可以,只是效率低一些

navicat为mysql建立索引的更多相关文章

  1. paip.提升性能--- mysql 建立索引 删除索引 很慢的解决.

    paip.提升性能--- mysql 建立索引 删除索引 很慢的解决. 作者Attilax ,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blo ...

  2. MySQL建立索引的注意事项

    对于大数据量的表格,尤其是百万行以上的数据表,一定要对其建立索引,否则查询速度极慢.(参考后面的测试结果)建立索引时需注意: MySQL的索引有两种:单列索引(即在某一列上建索引).多列组合索引(即在 ...

  3. mysql建立索引的几大原则

    (转)仅供自己学习,特此记录 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录.例如,学生表中学号是具有唯一性的字段.为该字段建立唯一性索引可以很快的确定某个学生的信息 ...

  4. mysql建立索引 删除索引

    建立索引 1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE ...

  5. 一个Web报表项目的性能分析和优化实践(四):MySQL建立索引,唯一索引和组合索引

    先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库,而且这几个项目的表是完全一样的. 数据库表的特点 ...

  6. 如何为mysql建立索引

    前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过 ...

  7. mysql建立索引类型及索引建立的原则

    索引类型:Unique(唯一索引,一般为主键),Normal(一般索引,普通字段,可做组合索引),索引方法:BTREE 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录 ...

  8. mysql 建立索引场合及索引使用

    索引建立场合: ① where后边字段 适合建立索引 ② order by 排序字段适合建立索引 ③ 索引覆盖 即 所要查询的字段本身就是索引 直接在索引中查询数据. 例如 select name,a ...

  9. MYSQL建立索引需要注意几点

    1.建立索引的时机:若表中的某字段出现在select.过滤.排序条件中,为该字段建立索引是值得的.2.对于like '%xxx'的模糊查询,普通的索引是无法满足的,需要建立全文索引.3.对于有多个条件 ...

随机推荐

  1. iOS界面不能点击(tableView 的cell 不能使用点击事件,tableView也不能上下滚动)

    iOS开发中间遇到了很多问题,有些后来又遇到,竟然忘记怎么处理了,所以还是来写下博客记录自己遇到的问题,方便自己也方便别人. 之前想的是项目小,就用storyboard在绘制界面,但是项目慢慢的扩展, ...

  2. ISP(Interface Segregation Principle),接口隔离原则

    ISP(Interface Segregation Principle),接口隔离原则 它要求如下: ①  一个类对另一个类的依赖性要建立在最小接口上. ②  使用多个专门的接口比使用单一的总接口要好 ...

  3. 使用Fresco实现简单的显示一张图片

    使用Fresco实现显示一张图片 仅仅是下载一张图片,在下载完之前,先显示一张站位图 效果图 源码 下载地址(Android Studio工程):http://download.csdn.net/de ...

  4. 最简单的基于librtmp的示例:接收(RTMP保存为FLV)

    ===================================================== 最简单的基于libRTMP的示例系列文章列表: 最简单的基于librtmp的示例:接收(RT ...

  5. 11 OptionsMenu 菜单

    OptionsMenu 选项菜单(系统菜单 ) OptionsMenu:系统级别菜单 菜单的使用步骤: 1. res里的menu里添加布局 在布局里写菜单项 2. 在逻辑代码中使用OnCreateOp ...

  6. UNIX网络编程——产生RST

    产生RST的3个条件:1. 建立连接的SYN到达某端口,但是该端口上没有正在监听的服务.   如:IP为192.168.1.33的主机上并没有开启WEB服务(端口号为0x50),这时我们通过IE去访问 ...

  7. Dynamics CRM 2015 站点地图公告配置实体显示名称的变更

    CRM更新2015后,在设置里找不到公告配置了 在原来的位置上你会东西一个叫活动源配置的东西,点开看后就是原来的公告配置.

  8. SimpleAdapter和Baseadapter填充listActivity-android学习之旅()

    简介 SimpleAdapter的功能是能够为AbsListView提供复杂的数据,需要构造ListView 代码示例 package peng.liu.testview; import androi ...

  9. iOS中分段控制器与UIScrollView结合使用

    指定根视图: // 设置window的根视图控制器 self.window.rootViewController = [[UINavigationController alloc] initWithR ...

  10. Android 有关于* daemon not running.starting it now on port 5037 *ADB

    adb shell时出现以下信息:  * daemon not running. starting it now on port5037 * ADB server didn't ACK  * fail ...