SlideShare une entreprise Scribd logo
1  sur  18
DEVELOPER USER GROUP
Bilbao, 7 de Febrero, 2014
BIENVENIDOS!!!
 ¿Qué es DUG?
 Es nuestra segunda reunión
 ¿Qué fue lo que más nos gustó?
 ¿Qué cambiaríamos?
PRESENTACIONES
@agarciaodeian
SOQL PARA GRANDES VOLÚMENES DE DATOS
Jesús González
@bit0211
SOQL PARA GRANDES VOLÚMENES DE DATOS
 Introducción
 Conceptos base.
 ¿Cómo optimizamos nuestras SOQL’s?
 Campos indizados
 Umbral selectivo
 Conclusiones
 Query Optimization – Recursos
 Recursos Adicionales * Query Resource Feedback
Parameter – Pilot
INTRODUCCIÓN
 Construimos un proceso que tratará cualquier
número de registros (más de 50 millones)
 Heap Size
 Disminuir scope (inviable)
  Refactorización
 Code statements / Time limit
  Refactorización (proceso perfect!)
 A pesar de que la cláusula SOQL tenía un ORDER
BY comportamiento extraño en el encadenamiento
entre de batchs.
  Quitamos el order by
  Refactorización
 ORA 1013 – La pesadilla. Ya en Blueray y DVD
 Query >2 minutos de procesamiento
CONCEPTOS BASE.
 Multitenant architecture. Una única solución de software
para todos los “tenants”.
 Se mantienen estructuras de BD virtuales y pivot tables
 Técnicas de rendimiento tradicionales no hacen efecto.
 La tabla subyacente no es apropiada para ser indizada.
 Salesforce Query Optimizer (SQO).
 Ayudan a determinar el mejor plan de ejecución basado en
los índices de la condición de la query, estadísticas de
ejecución, generan tablas de índices, …
 Las dynamic pre-queries determinarán si se utiliza el valor en
“caché” o se consultará a la base de datos directamente.
Ejemplo (*Account_Type  custom index):
SELECT * from Account WHERE Account_Type=‘Large’
¿CÓMO OPTIMIZAMOS NUESTRAS SOQL’S?
 Utilizando campos que estén indizados
SELECT Id from Account WHERE CreatedDate > 2013-01-01T00:00:00Z
 Reduciendo el número de registros que recuperamos
(30% para 1mill + 10% para el resto)
 Evitando procesamiento de la BD:
 No usando fórmulas
SELECT id, Date1__c FROM Account WHERE IsValidDate__c = true
 No consultando valores nulos
SELECT id FROM Account WHERE ShippingAddress__c = null
 No usando comodines en los textos %
SELECT id FROM Account WHERE Name LIKE ‘%Acme%’
 Solicitando custom indexes (Customer support)
SELECT id FROM Account WHERE Type__c = ‘Vendor’
CAMPOS INDIZADOS
 Standard Fields indizados en todos los objetos
 Id
 Name
 OwnerId
 CreatedDate
 SystemModstamp
 RecordType
 Siempre indizado para los objetos que usen esta propiedad
 Master-detail fields
 Lookup fields
 Otros campos indizados
 Unique fields
 External ID fields
 **Custom indexes
UMBRAL SELECTIVO
 Condición unaria:
 Standard index
 <30% sobre el primer millón de registros
 <15% del total después del 1er millón
 <1millón de registros
 Custom index
 <10% sobre el primer millón
 <5% del total después del 1er millón
 <333,333 en total
 Compuestas
 AND:
 <2 veces el umbral de cada filtro
 < umbral por intersección de campos
UMBRAL SELECTIVO (2)
 Compuestas (continuación)
 OR:
 < El umbral de cada uno de los filtros
 < El umbral de la suma de los campos
 LIKE:
 Para las condiciones que no comiencen con un comodín (%)
Force.com comprueba los primeros 100,000 registros.
EJEMPLO DE UMBRAL
 Si tenemos 1 millón de casos (con un custom index
en el campo Status) repartidos así:
[SELECT id FROM Case WHERE Status != ‘Closed’] No usa
índice y además está por encima del umbral.
[SELECT id FROM Case WHERE Status IN (‘New’, ‘On Hold’,
‘Pending’, ‘ReOpened’)] Está dentro del umbral
Estado de los casos Número de registros en
BD
New 50,000
Closed 880,000
On Hold 20,000
Pending 30,000
ReOpened 20,000
EXCEPCIONES SELECTIVAS
 Excepciones en los que las queries son no
selectivas y por lo tanto no usan índices
 Condiciones con:
 Filtros negativos: !=, NOT LIKE, EXCLUDES
 Comparación de textos: text_field [< | > | <= | >=]
 Comodines: LIKE ‘%string%’
 Referencias a fórmulas no deterministas: Cross-object formula
fields, dependientes del tiempo,…
 Campos con valores nulos
CONCLUSIONES
 No hacer consultas dentro de bucles para reducir el
tiempo y evitar errores de governador
 Si podemos, no almacenar los datos en variables,
usar for loops.
 Si nuestra query no hace uso de índices o no
cumple el umbral de selectividad, pensar en qué es
más costoso en nuestra query:
 ORDER BY
 Queries sobre null realizan un “full table scan”.
 Filtrar sobre fórmulas (se calculan en tiempo de ejecución) vs
descomponer en un conjunto de filtros
 Recuperar la mínima información posible
 Limitar una query casi no reduce el coste de ejecutar la query
 El uso de IN es tratado como un conjunto de igualdades
QUERY OPTIMIZATION – RECURSOS
 Query search optimization cheat sheet.
 http://s3.amazonaws.com/dfc-wiki/en/images/0/0e/Db-query-search-
optimization-cheat-sheet.pdf
 Large data volumes best practices (Winter’12). Muy
interesante: underlaying concepts.
 http://www.salesforce.com/us/developer/docs/ldv/salesforce_large_data_
volumes_bp.pdf
 Consideraciones sobre los campos nulos y las fórmulas en
las queries.
 http://blogs.developerforce.com/engineering/2013/02/force-com-soql-
best-practices-nulls-and-formula-fields.html
 Publicaciones de MVP’s (recomiendo el primero)
 http://blogs.developerforce.com/engineering/2013/07/maximizing-the-
performance-of-force-com-soql-reports-and-list-views.html
 http://blogs.developerforce.com/engineering/2013/09/collecting-
selectivity-statistics-for-force-com-queries.html
 http://blogs.developerforce.com/engineering/2013/03/force-com-formula-
fields-indexes-and-performance-gotchas.html
RECURSOS ADICIONALES
 Herramientas
 http://wiki.developerforce.com/page/A_Guide_to_Applic
ation_Performance_Profiling_in_Force.com
 “White paper” Guía oficial para los “arquitectos” de
las aplicaciones escrita por Salesforce.
 http://wiki.developerforce.com/page/Best_Practices_for
_Deployments_with_Large_Data_Volumes
 Query Resource Feedback Parameter – Pilot
 https://eu2.salesforce.com/help/pdfs/en/salesforce_spri
ng14_release_notes.pdf - página 284
SALESFORCE1
Carolina Ruiz
@CarolEnLaNube
GRACIAS!!
NOS VEMOS EN EL PRÓXIMO DUG

Contenu connexe

Similaire à 2nd Salesforce Developer Group - Bilbao

Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2
Luis Jherry
 
Diseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bdDiseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bd
Luis Jherry
 
Diseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bdDiseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bd
Luis Jherry
 
Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2
Luis Jherry
 
Manual basico del_lenguaje_sql
Manual basico del_lenguaje_sqlManual basico del_lenguaje_sql
Manual basico del_lenguaje_sql
Tomas Castle
 
Afinamientodebasesdedatosyservidoreswebs
AfinamientodebasesdedatosyservidoreswebsAfinamientodebasesdedatosyservidoreswebs
Afinamientodebasesdedatosyservidoreswebs
ricardosusa5
 

Similaire à 2nd Salesforce Developer Group - Bilbao (20)

Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2
 
Diseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bdDiseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bd
 
Pres17BDII.ppt
Pres17BDII.pptPres17BDII.ppt
Pres17BDII.ppt
 
Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2Database fundamental itprosdc_chapter2
Database fundamental itprosdc_chapter2
 
Optimizacion De Consultas
Optimizacion De ConsultasOptimizacion De Consultas
Optimizacion De Consultas
 
Diseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bdDiseño físico y rendimiento de la bd
Diseño físico y rendimiento de la bd
 
Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2Diseño físico y rendimiento de la bd2
Diseño físico y rendimiento de la bd2
 
Lenguaje Transact sql
Lenguaje Transact sqlLenguaje Transact sql
Lenguaje Transact sql
 
Ti. Sql.Caso1al9.Consultas
Ti. Sql.Caso1al9.ConsultasTi. Sql.Caso1al9.Consultas
Ti. Sql.Caso1al9.Consultas
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
SQL Server rápido y furioso
SQL Server rápido y furiosoSQL Server rápido y furioso
SQL Server rápido y furioso
 
Manual basico del_lenguaje_sql
Manual basico del_lenguaje_sqlManual basico del_lenguaje_sql
Manual basico del_lenguaje_sql
 
Afinamientodebasesdedatosyservidoreswebs
AfinamientodebasesdedatosyservidoreswebsAfinamientodebasesdedatosyservidoreswebs
Afinamientodebasesdedatosyservidoreswebs
 
Presentación sql
Presentación sqlPresentación sql
Presentación sql
 
Libro de recetas.pptx
Libro de recetas.pptxLibro de recetas.pptx
Libro de recetas.pptx
 
Indices columnares | SolidQ Summit 2012
Indices columnares | SolidQ Summit 2012Indices columnares | SolidQ Summit 2012
Indices columnares | SolidQ Summit 2012
 
Tuning fondo-negro-2
Tuning fondo-negro-2Tuning fondo-negro-2
Tuning fondo-negro-2
 
Sql
SqlSql
Sql
 
Manejo De Sentencias De Definicion
Manejo De Sentencias De DefinicionManejo De Sentencias De Definicion
Manejo De Sentencias De Definicion
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
 

Plus de northspainsalesforcedevelopergroup

Plus de northspainsalesforcedevelopergroup (20)

17th Salesforce Developer Group meeting in Bilbao
17th Salesforce Developer Group meeting in Bilbao17th Salesforce Developer Group meeting in Bilbao
17th Salesforce Developer Group meeting in Bilbao
 
Salesforce Elevate - Bilbao '17 - Separación de Conceptos - SoC
Salesforce Elevate - Bilbao '17 - Separación de Conceptos - SoCSalesforce Elevate - Bilbao '17 - Separación de Conceptos - SoC
Salesforce Elevate - Bilbao '17 - Separación de Conceptos - SoC
 
Salesforce Elevate - Bilbao '17 - Process automation with and without code
Salesforce Elevate - Bilbao '17 - Process automation with and without codeSalesforce Elevate - Bilbao '17 - Process automation with and without code
Salesforce Elevate - Bilbao '17 - Process automation with and without code
 
Salesforce Elevate - Bilbao '17 - Introducción FinancialForce
Salesforce Elevate - Bilbao '17 - Introducción FinancialForceSalesforce Elevate - Bilbao '17 - Introducción FinancialForce
Salesforce Elevate - Bilbao '17 - Introducción FinancialForce
 
Salesforce Elevate - Bilbao '17 - Introducción NTS
Salesforce Elevate - Bilbao '17 - Introducción NTSSalesforce Elevate - Bilbao '17 - Introducción NTS
Salesforce Elevate - Bilbao '17 - Introducción NTS
 
Salesforce Elevate - Bilbao '17 - Chatbot y Salesforce
Salesforce Elevate - Bilbao '17 - Chatbot y SalesforceSalesforce Elevate - Bilbao '17 - Chatbot y Salesforce
Salesforce Elevate - Bilbao '17 - Chatbot y Salesforce
 
Salesforce Elevate - Bilbao '17 - Introducción Salesforce
Salesforce Elevate - Bilbao '17 - Introducción SalesforceSalesforce Elevate - Bilbao '17 - Introducción Salesforce
Salesforce Elevate - Bilbao '17 - Introducción Salesforce
 
14th Salesforce Developer Group meeting in Bilbao
14th Salesforce Developer Group meeting in Bilbao14th Salesforce Developer Group meeting in Bilbao
14th Salesforce Developer Group meeting in Bilbao
 
12th Salesforce Developer Group meeting in Bilbao
12th Salesforce Developer Group meeting in Bilbao12th Salesforce Developer Group meeting in Bilbao
12th Salesforce Developer Group meeting in Bilbao
 
13th Salesforce Developer Group meeting in Bilbao
13th Salesforce Developer Group meeting in Bilbao13th Salesforce Developer Group meeting in Bilbao
13th Salesforce Developer Group meeting in Bilbao
 
11th Salesforce Developer Group meeting in Bilbao
11th Salesforce Developer Group meeting in Bilbao11th Salesforce Developer Group meeting in Bilbao
11th Salesforce Developer Group meeting in Bilbao
 
9th Salesforce Developer Group meeting in Bilbao
9th Salesforce Developer Group meeting in Bilbao9th Salesforce Developer Group meeting in Bilbao
9th Salesforce Developer Group meeting in Bilbao
 
8th Salesforce Developer Group meeting in Bilbao
8th Salesforce Developer Group meeting in Bilbao8th Salesforce Developer Group meeting in Bilbao
8th Salesforce Developer Group meeting in Bilbao
 
6th Salesforce Developer Group - Bilbao
6th Salesforce Developer Group - Bilbao6th Salesforce Developer Group - Bilbao
6th Salesforce Developer Group - Bilbao
 
Salesforce Bilbao Elevate 2015 - Presentación principal y FinancialForce
Salesforce Bilbao Elevate 2015 - Presentación principal y FinancialForceSalesforce Bilbao Elevate 2015 - Presentación principal y FinancialForce
Salesforce Bilbao Elevate 2015 - Presentación principal y FinancialForce
 
Salesforce Elevate Bilbao 2015 - Desuto Presentación
Salesforce Elevate Bilbao 2015 - Desuto PresentaciónSalesforce Elevate Bilbao 2015 - Desuto Presentación
Salesforce Elevate Bilbao 2015 - Desuto Presentación
 
Salesforce Bilbao Elevate 2015 - Nts cloud computing y sfdc
Salesforce Bilbao Elevate 2015 - Nts cloud computing y sfdcSalesforce Bilbao Elevate 2015 - Nts cloud computing y sfdc
Salesforce Bilbao Elevate 2015 - Nts cloud computing y sfdc
 
Salesforce Bilbao Elevate '15 - 4th developer workshop
Salesforce Bilbao Elevate '15 - 4th developer workshopSalesforce Bilbao Elevate '15 - 4th developer workshop
Salesforce Bilbao Elevate '15 - 4th developer workshop
 
Salesforce Bilbao Elevate '15 - 2nd developer workshop
Salesforce Bilbao Elevate '15 - 2nd developer workshopSalesforce Bilbao Elevate '15 - 2nd developer workshop
Salesforce Bilbao Elevate '15 - 2nd developer workshop
 
Salesforce Bilbao Elevate '15 - 1st developer workshop
Salesforce Bilbao Elevate '15 - 1st developer workshopSalesforce Bilbao Elevate '15 - 1st developer workshop
Salesforce Bilbao Elevate '15 - 1st developer workshop
 

Dernier

tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
susafy7
 

Dernier (20)

nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdfAnálisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
 
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
“Análisis comparativo de viscosidad entre los fluidos de yogurt natural, acei...
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelosFicha Tecnica de Ladrillos de Tabique de diferentes modelos
Ficha Tecnica de Ladrillos de Tabique de diferentes modelos
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
 
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
Resistencia-a-los-antimicrobianos--laboratorio-al-cuidado-del-paciente_Marcel...
 
Presentacion de la ganaderia en la región
Presentacion de la ganaderia en la regiónPresentacion de la ganaderia en la región
Presentacion de la ganaderia en la región
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 
Tabla de referentes empíricos para tesis-1.docx
Tabla de referentes empíricos para tesis-1.docxTabla de referentes empíricos para tesis-1.docx
Tabla de referentes empíricos para tesis-1.docx
 
Lineamientos del Plan Oferta y Demanda sesión 5
Lineamientos del Plan Oferta y Demanda sesión 5Lineamientos del Plan Oferta y Demanda sesión 5
Lineamientos del Plan Oferta y Demanda sesión 5
 
tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
Minería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptosMinería convencional: datos importantes y conceptos
Minería convencional: datos importantes y conceptos
 
Sistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptxSistemas de Ecuaciones no lineales-1.pptx
Sistemas de Ecuaciones no lineales-1.pptx
 
Clasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docxClasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docx
 
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVOESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
ESPECIFICACIONES TECNICAS COMPLEJO DEPORTIVO
 

2nd Salesforce Developer Group - Bilbao

  • 1. DEVELOPER USER GROUP Bilbao, 7 de Febrero, 2014
  • 2. BIENVENIDOS!!!  ¿Qué es DUG?  Es nuestra segunda reunión  ¿Qué fue lo que más nos gustó?  ¿Qué cambiaríamos?
  • 4. SOQL PARA GRANDES VOLÚMENES DE DATOS Jesús González @bit0211
  • 5. SOQL PARA GRANDES VOLÚMENES DE DATOS  Introducción  Conceptos base.  ¿Cómo optimizamos nuestras SOQL’s?  Campos indizados  Umbral selectivo  Conclusiones  Query Optimization – Recursos  Recursos Adicionales * Query Resource Feedback Parameter – Pilot
  • 6. INTRODUCCIÓN  Construimos un proceso que tratará cualquier número de registros (más de 50 millones)  Heap Size  Disminuir scope (inviable)   Refactorización  Code statements / Time limit   Refactorización (proceso perfect!)  A pesar de que la cláusula SOQL tenía un ORDER BY comportamiento extraño en el encadenamiento entre de batchs.   Quitamos el order by   Refactorización  ORA 1013 – La pesadilla. Ya en Blueray y DVD  Query >2 minutos de procesamiento
  • 7. CONCEPTOS BASE.  Multitenant architecture. Una única solución de software para todos los “tenants”.  Se mantienen estructuras de BD virtuales y pivot tables  Técnicas de rendimiento tradicionales no hacen efecto.  La tabla subyacente no es apropiada para ser indizada.  Salesforce Query Optimizer (SQO).  Ayudan a determinar el mejor plan de ejecución basado en los índices de la condición de la query, estadísticas de ejecución, generan tablas de índices, …  Las dynamic pre-queries determinarán si se utiliza el valor en “caché” o se consultará a la base de datos directamente. Ejemplo (*Account_Type  custom index): SELECT * from Account WHERE Account_Type=‘Large’
  • 8. ¿CÓMO OPTIMIZAMOS NUESTRAS SOQL’S?  Utilizando campos que estén indizados SELECT Id from Account WHERE CreatedDate > 2013-01-01T00:00:00Z  Reduciendo el número de registros que recuperamos (30% para 1mill + 10% para el resto)  Evitando procesamiento de la BD:  No usando fórmulas SELECT id, Date1__c FROM Account WHERE IsValidDate__c = true  No consultando valores nulos SELECT id FROM Account WHERE ShippingAddress__c = null  No usando comodines en los textos % SELECT id FROM Account WHERE Name LIKE ‘%Acme%’  Solicitando custom indexes (Customer support) SELECT id FROM Account WHERE Type__c = ‘Vendor’
  • 9. CAMPOS INDIZADOS  Standard Fields indizados en todos los objetos  Id  Name  OwnerId  CreatedDate  SystemModstamp  RecordType  Siempre indizado para los objetos que usen esta propiedad  Master-detail fields  Lookup fields  Otros campos indizados  Unique fields  External ID fields  **Custom indexes
  • 10. UMBRAL SELECTIVO  Condición unaria:  Standard index  <30% sobre el primer millón de registros  <15% del total después del 1er millón  <1millón de registros  Custom index  <10% sobre el primer millón  <5% del total después del 1er millón  <333,333 en total  Compuestas  AND:  <2 veces el umbral de cada filtro  < umbral por intersección de campos
  • 11. UMBRAL SELECTIVO (2)  Compuestas (continuación)  OR:  < El umbral de cada uno de los filtros  < El umbral de la suma de los campos  LIKE:  Para las condiciones que no comiencen con un comodín (%) Force.com comprueba los primeros 100,000 registros.
  • 12. EJEMPLO DE UMBRAL  Si tenemos 1 millón de casos (con un custom index en el campo Status) repartidos así: [SELECT id FROM Case WHERE Status != ‘Closed’] No usa índice y además está por encima del umbral. [SELECT id FROM Case WHERE Status IN (‘New’, ‘On Hold’, ‘Pending’, ‘ReOpened’)] Está dentro del umbral Estado de los casos Número de registros en BD New 50,000 Closed 880,000 On Hold 20,000 Pending 30,000 ReOpened 20,000
  • 13. EXCEPCIONES SELECTIVAS  Excepciones en los que las queries son no selectivas y por lo tanto no usan índices  Condiciones con:  Filtros negativos: !=, NOT LIKE, EXCLUDES  Comparación de textos: text_field [< | > | <= | >=]  Comodines: LIKE ‘%string%’  Referencias a fórmulas no deterministas: Cross-object formula fields, dependientes del tiempo,…  Campos con valores nulos
  • 14. CONCLUSIONES  No hacer consultas dentro de bucles para reducir el tiempo y evitar errores de governador  Si podemos, no almacenar los datos en variables, usar for loops.  Si nuestra query no hace uso de índices o no cumple el umbral de selectividad, pensar en qué es más costoso en nuestra query:  ORDER BY  Queries sobre null realizan un “full table scan”.  Filtrar sobre fórmulas (se calculan en tiempo de ejecución) vs descomponer en un conjunto de filtros  Recuperar la mínima información posible  Limitar una query casi no reduce el coste de ejecutar la query  El uso de IN es tratado como un conjunto de igualdades
  • 15. QUERY OPTIMIZATION – RECURSOS  Query search optimization cheat sheet.  http://s3.amazonaws.com/dfc-wiki/en/images/0/0e/Db-query-search- optimization-cheat-sheet.pdf  Large data volumes best practices (Winter’12). Muy interesante: underlaying concepts.  http://www.salesforce.com/us/developer/docs/ldv/salesforce_large_data_ volumes_bp.pdf  Consideraciones sobre los campos nulos y las fórmulas en las queries.  http://blogs.developerforce.com/engineering/2013/02/force-com-soql- best-practices-nulls-and-formula-fields.html  Publicaciones de MVP’s (recomiendo el primero)  http://blogs.developerforce.com/engineering/2013/07/maximizing-the- performance-of-force-com-soql-reports-and-list-views.html  http://blogs.developerforce.com/engineering/2013/09/collecting- selectivity-statistics-for-force-com-queries.html  http://blogs.developerforce.com/engineering/2013/03/force-com-formula- fields-indexes-and-performance-gotchas.html
  • 16. RECURSOS ADICIONALES  Herramientas  http://wiki.developerforce.com/page/A_Guide_to_Applic ation_Performance_Profiling_in_Force.com  “White paper” Guía oficial para los “arquitectos” de las aplicaciones escrita por Salesforce.  http://wiki.developerforce.com/page/Best_Practices_for _Deployments_with_Large_Data_Volumes  Query Resource Feedback Parameter – Pilot  https://eu2.salesforce.com/help/pdfs/en/salesforce_spri ng14_release_notes.pdf - página 284
  • 18. GRACIAS!! NOS VEMOS EN EL PRÓXIMO DUG