SlideShare ist ein Scribd-Unternehmen logo
1 von 30
*
有钱Android索引优化调研总结
王朋
概要
 Analyze案例
 Sqlite索引
 其他优化及建议
本Slide术语
 FTS:全表扫描
 KLogN: N代表table总行数,K代码选择的行数
Before执行analyze命令
After执行analyze命令
有无Analyze命令,query性能对比
0
525
500
250
1000
21ms
731ms
After analyze
Before analyze
Why?Explain query plan
Time: FTS + KLogK
Time: KLogK
Analyze命令
 Sqlite不收集统计信息,这点不像其他DBMS。
 支持执行analyze命令,收集tables和index的统计信息,从而
query时选取最佳index。
 Create table sqlite_stat1(tbl, idx, stat)。
o tbl:table的名字;idx:index的名字
o Stat:第一个数字表示index对应的行数;第二个数字表示(行数/不相同的行
数)。
 Analyze案例
 Sqlite索引
 其他优化及建议
Sqlite索引
 table对应B+树,key是rowid,data是这一行其他列数据
(sqlite为每一行分配了一个rowid)
 index对应B-树,key是需要索引的列,data是rowid
Table储存结构
Tables Without Indices
 CREATE TABLE FruitsForSale(Fruit TEXT,State TEXT,Price REAL);
Figure 1: Logical Layout Of Table "FruitsForSale"
Tables Without Indices
 SELECT price FROM fruitsforsale WHERE fruit='Peach’;
Figure 2: Full Table Scan"
Lookup By Index
CREATE INDEX Idx1 ON
fruitsforsale(fruit);
SELECT price FROM
fruitsforsale WHERE
fruit='Peach’;
Time:LogN + KLogN(K=1)
Multiple Result Rows
 SELECT price FROM fruitsforsale WHERE fruit='Orange’
 Time:LogN + KLogN(K=2)
Figure 6: Indexed Lookup For The Price Of Oranges
多列索引
Figure 1: A Two-Column Index
 CREATE INDEX Idx3 ON FruitsForSale(fruit, state);
多列索引
 SELECT price FROM fruitsforsale WHERE fruit='Orange'
AND state='CA'
Figure 11: Lookup Using A Two-Column Index
多列索引
 SELECT price FROM fruitsforsale WHERE fruit='Peach'
Figure 12: Single-Column Lookup On A Multi-Column Index
覆盖索引
 CREATE INDEX Idx4 ON FruitsForSale(fruit, state, price);
Figure 13: A Covering Index
覆盖索引
 SELECT price FROM fruitsforsale WHERE fruit='Orange'
AND state='CA';
Figure 14: Query Using A Covering Index
排序:order by
 SELECT * FROM fruitsforsale ORDER BY fruit;
 Time:FTS + NLogN
Figure 16: Sorting Without An Index
Order by索引
 SELECT * FROM fruitsforsale ORDER BY fruit;
 Time:KLogN
Figure 18: Sorting With An Index
Order by覆盖索引
 multiple rowid lookups can be avoided
 Time:K
Figure 19: Sorting With A Covering Index
 Analyze案例
 Sqlite索引
 其他优化及建议
满足一定条件才创建索引
 避免索引开销。
 Table行数不多时,全表扫描可能更快
使用多列、覆盖索引优化
 避免回表开销
 减少索引数量
减少查询字段
减少磁盘io次数
有钱数据库表结构 • bool值索引较多1/2
• 单列索引较多
• 没有使用多列索引
有钱sqlite索引优化总结、建议
 执行Analyze命令。 Query性能提升1-40倍。
 删除区分度差的索引(占比1/2),比如bool类型的字段索引。
Write性能提升2倍左右。
 满足一定条件才创建索引。
 查询时只取需要的字段。Query性能提升1-10倍。
 使用组合索引,减少回表开销、减少索引数目。
Query性能提升1-5倍,稍微提升write性能。
参考资料
 Query Planning
 SQLite Database System Design and Implementation
 Inside SQLite

Weitere ähnliche Inhalte

Ähnlich wie 有钱Android索引优化调研总结

腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析
George Ang
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈
yiditushe
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
Leyi (Kamus) Zhang
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
fulin tang
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
fulin tang
 
Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01
yubao fu
 
Mysqlexplain 执行计划解读
Mysqlexplain 执行计划解读Mysqlexplain 执行计划解读
Mysqlexplain 执行计划解读
colderboy17
 

Ähnlich wie 有钱Android索引优化调研总结 (18)

腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析腾讯大讲堂48 数据库查询优化浅析
腾讯大讲堂48 数据库查询优化浅析
 
资身Dba经验谈
资身Dba经验谈资身Dba经验谈
资身Dba经验谈
 
数据库性能诊断的七种武器
数据库性能诊断的七种武器数据库性能诊断的七种武器
数据库性能诊断的七种武器
 
MySQL查询优化浅析
MySQL查询优化浅析MySQL查询优化浅析
MySQL查询优化浅析
 
Sql培训 (1)
Sql培训 (1)Sql培训 (1)
Sql培训 (1)
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
基于Lucene的站内搜索
基于Lucene的站内搜索基于Lucene的站内搜索
基于Lucene的站内搜索
 
Elastic Stack 最新动态
Elastic Stack 最新动态Elastic Stack 最新动态
Elastic Stack 最新动态
 
PostgreSQL 10 New Features
PostgreSQL 10 New FeaturesPostgreSQL 10 New Features
PostgreSQL 10 New Features
 
Apache IoTDB 工业互联网时序数据库 meetup-2019.12
Apache IoTDB 工业互联网时序数据库 meetup-2019.12Apache IoTDB 工业互联网时序数据库 meetup-2019.12
Apache IoTDB 工业互联网时序数据库 meetup-2019.12
 
Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01
 
MySQL Explain
MySQL Explain MySQL Explain
MySQL Explain
 
Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01
 
Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01Mysqlexplain 100712043803-phpapp01
Mysqlexplain 100712043803-phpapp01
 
Mysqlexplain 执行计划解读
Mysqlexplain 执行计划解读Mysqlexplain 执行计划解读
Mysqlexplain 执行计划解读
 
MySQL Explain输出详解
MySQL Explain输出详解MySQL Explain输出详解
MySQL Explain输出详解
 
Mysql explain
Mysql explainMysql explain
Mysql explain
 
7
77
7
 

Mehr von 朋 王 (7)

Android系统内存管理介绍(上)
Android系统内存管理介绍(上)Android系统内存管理介绍(上)
Android系统内存管理介绍(上)
 
Android线程简介
Android线程简介Android线程简介
Android线程简介
 
Json解析库性能评测
Json解析库性能评测Json解析库性能评测
Json解析库性能评测
 
Android chromium web view
Android chromium web viewAndroid chromium web view
Android chromium web view
 
introduce Okhttp
introduce Okhttpintroduce Okhttp
introduce Okhttp
 
networking performance
networking performancenetworking performance
networking performance
 
Android+bitmap优化
Android+bitmap优化Android+bitmap优化
Android+bitmap优化
 

有钱Android索引优化调研总结