博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
索引上优化细节
阅读量:2339 次
发布时间:2019-05-10

本文共 1401 字,大约阅读时间需要 4 分钟。

索引优化不能孤立的考虑,首先你需要熟悉查询优化以及服务器调优,然后再决定索引.
数据类型:
更小通常更好.简单就好.尽量避免NULL.
由于DECIMAL需要额外的空间和计算开销,只有在需要对小数进行精确计算的时候才使用DECIMAL,比如金融数据.
很少发生更新的时候,通常适合VARCHAR.
CHAR适合存储用户密码的MD5哈希值.
ENUM和SET列适合用来保存订单的状态,产品的类别或性别这样的信息.
IP地址应该用无符号的整型来保存,INET_ATON()和INET_NTOA()函数可以在IP地址和整数之间互相转换.
索引基础知识:
如果索引了多列数据,那么列的顺序非常重要,因为MySQL只能高效地搜索索引的最左前缀. 创建一个双列索引和两个单列索引是不一样的.
索引是存储引擎层实现的,而不是服务器层.索引各个引擎对索引的实现有所不同.
索引类型:B-TREE索引,哈希索引,空间索引(R-Tree), 全文索引.
B-TREE索引按顺序保存了索引的列,它对搜索范围数据很有用.
如果查找没有从索引列的最左边开始,它就没什么用处.不能跳过索引中的列,这和函数参数一样.
目前,只有MEMORY存储引擎支持显式的哈希索引, 哈希索引对使用了每一列的精确查找有用.
mysql不能适用哈希索引进行排序.因为他是散列的.
InnoDB有一个特别的功能,叫自适应哈希索引.这是自动为频繁访问对象加的一个类似哈希的内存索引.
MYISAM支持空间索引,空间索引不会要求WHERE子句适用索引的最左前缀.
如果查询中没有隔离索引的列,MYSQL通常不会使用索引."隔离"列意味着它不是表达式的一部分,也没有位于函数中.例如下面查询不能适用id上的索引:
select id from actor where di + 1 = 5;
前缀索引.有时需要索引很长的字符列,策略就是适用前缀索引,关于前缀的长度有个选择率.这个值能接近0.31基本就可以了,可以在同一个查询中针对不同的前缀长度进行计算,这对于大表非常有用.:
select count(distinct left(city, 3))/count(*) as sel3,
       count(distinct left(city, 4))/count(*) as sel4,
       count(distinct left(city, 5))/count(*) as sel5,
       count(distinct left(city, 6))/count(*) as sel6,
       count(distinct left(city, 7))/count(*) as sel7,
from sakila.city_demo;
前缀索引也有缺点,不能在ORDER BY 或GROUP BY查询中使用.
聚集索引是一种存储数据的方式,"聚集"指实际的数据行和相关的键值都保存在一起.当前,SolidDB,和InnoDB是唯一支持聚集索引的存储引擎.
可以在CREATE TABLE 时用PACK_KEYS控制索引压缩的方式.
重复索引是类型相同,以同样的顺序在同样的列上创建的索引.应该避免创建重复索引,并且在发现它的时候把它移除掉.
索引对INNODB有很重要的作用,因为它会让查询锁定更少的列.
在任何可能的地方,都要试着扩展索引,而不是新增索引.因为容易维护.

转载地址:http://sewvb.baihongyu.com/

你可能感兴趣的文章
上百个Android开源项目(转)
查看>>
什么时候加上android.intent.category.DEFAULT
查看>>
Android应用底部导航栏(选项卡)实例
查看>>
Android 滑动效果入门篇(一)—— ViewFlipper
查看>>
Android高手进阶教程(五)之----Android 中LayoutInflater的使用!
查看>>
android自带的xml解析类分析
查看>>
android ListView详解
查看>>
Android 类ListView下拉刷新控件实现
查看>>
自定义Activity标题栏(Title bar)和窗体显示状态操作(requestWindowFeature()的应用)
查看>>
AndroidGUI25:定制Activity的标题栏(Titlebar)
查看>>
ImageView.ScaleType设置图解
查看>>
Android ViewPager使用详解
查看>>
android所有控件
查看>>
Spket在Eclipse/MyEclipse下的安装和配置
查看>>
问题Re-installation failed due to different application signatures.解决
查看>>
命令行下Android AVD命令解析
查看>>
Eclipse 代码提示功能设置。
查看>>
Eclipse for Android xml 文件代码自动提示功能
查看>>
Android小例子(点击一个按钮,传递数据给另一个页面)
查看>>
Android LayoutInflater的使用
查看>>