Привет всем, спасибо за комментарии,
Я смог заставить его работать. вот мой код ниже. любые предложения приветствуются
Я не совсем уверен, что это правильный путь, но он работает
import React, { Component } from 'react'
export default class Scrable extends Component {
constructor(el) {
super(el)
this.el = el
this.chars = "!<>-_\\/[]{}—=+*^?#________"
// this.update = this.update.bind(this)
}
componentDidMount(){
const phrases = [
'Neo,',
'sooner or later',
'you\'re going to realize',
'just as I did',
'that there\'s a difference',
'between knowing the path',
'and walking the path'
]
const el = document.querySelector('.text')
const fx = new TextScramble(el)
let counter = 0
const next = () => {
fx.setText(phrases[counter]).then(() => {
setTimeout(next, 800)
})
counter = (counter + 1) % phrases.length
}
next()
console.log(el)
}
render() {
const phrases = [
"Neo,",
"sooner or later",
"you're going to realize",
"just as I did",
"that there's a difference",
"between knowing the path",
"and walking the path",
]
return (
<div>
<div className="text">text</div>
</div>
)
}
}
class TextScramble {
constructor(el) {
this.el = el
this.chars = '!<>-_\\/[]{}—=+*^?#________'
this.update = this.update.bind(this)
console.log(this)
}
setText(newText) {
const oldText = this.el.innerText
const length = Math.max(oldText.length, newText.length)
const promise = new Promise((resolve) => this.resolve = resolve)
this.queue = []
for (let i = 0; i < length; i++) {
const from = oldText[i] || ''
const to = newText[i] || ''
const start = Math.floor(Math.random() * 40)
const end = start + Math.floor(Math.random() * 40)
this.queue.push({ from, to, start, end })
}
cancelAnimationFrame(this.frameRequest)
this.frame = 0
this.update()
return promise
}
update() {
let output = ''
let complete = 0
for (let i = 0, n = this.queue.length; i < n; i++) {
let { from, to, start, end, char } = this.queue[i]
if (this.frame >= end) {
complete++
output += to
} else if (this.frame >= start) {
if (!char || Math.random() < 0.28) {
char = this.randomChar()
this.queue[i].char = char
}
output += `<span class="dud">${char}</span>`
} else {
output += from
}
}
this.el.innerHTML = output
if (complete === this.queue.length) {
this.resolve()
} else {
this.frameRequest = requestAnimationFrame(this.update)
this.frame++
}
}
randomChar() {
return this.chars[Math.floor(Math.random() * this.chars.length)]
}
}
Первый план не использует индекс на shows
.
Если Вы уверены, что этот индекс поможет Вам, вызовет его:
SELECT ...
FROM ..., shows FORCE INDEX (biddate_idx) , ...
WHERE ...
Между тем соберите статистические данные для своих таблиц.
MySQL смотрит на данные в таблицах, а также самом запросе для решения который план выполнения использовать.
Если бы данные являются тем же в обеих базах данных, я предложил бы использовать, АНАЛИЗИРУЮТ или ОПТИМИЗИРУЮТ на всех таблицах в Вашем запросе.
Вы уверены, что это от того же запроса? Объяснение просто не немного отличается, существуют существенные различия между ними:
Я попытался бы повторно создать статистику и восстановить индексы для всех таблиц и видел бы, решает ли это Вашу проблему - вероятно именно поэтому, что планы отличались бы.
Существует много других вещей, которыми это могло быть (память, диск, различия OS, другие загрузки, и т.д.), но я предполагаю, что это, вероятно, не проблема, так как Вы упомянули, что это хорошо работало прежде.
We just experienced a very similar problem with a newly built master taking several minutes to execute the same query that old master (with less power) completed in a fraction of a second. We ran repair table quick on two of the myisam tables in the query and now the new master executes the query at least as fast as the old one.
Thanks!